ошибка httpd websocket, токен «обновление» не найден в заголовке «Подключение»

#javascript #apache #websocket #virtualhost

#язык JavaScript #апач #websocket #виртуальный хост

Вопрос:

Я развертываю (go1.16.7) серверную часть Golang на vps Namecheap, используя Apache( httpd...Server version: Apache/2.4.37 (centos 8) ) Все работает, кроме подключения к websocket. Запрос сделан на:

 wss://editor.xyzw.com/crownies/ws/upload/file?email=gbenroscience@gmail.com  

Когда я пытаюсь получить доступ к подключению websocket, это дает:

 the client is not using the websocket protocol:'upgrade' token not found in 'Connection' header  

(Я напечатал эту ошибку в производственном коде golang)

Websocket работает локально в разработке, поэтому я знаю, что код Golang работает хорошо. Я уверен, что проблема где-то в моей конфигурации vhost в Apache.

Вот мой файл vhost:

 lt;VirtualHost *:443gt;  ServerName editor.xyzw.com  ServerAlias editor.xyzw.com www.editor.xyzw.com http://www.editor.xyzw.com  UseCanonicalName Off  LogFormat "%h %l %u %t "%r" %gt;s %b "%{Referer}i" "%{User-agent}i"" combined  CustomLog /var/log/httpd/editor_access.log combined  ErrorLog /var/log/httpd/editor_error.log  DocumentRoot /path/to/my/document/root    SSLEngine on    SSLCertificateFile /opt/ssl/cert.crt    SSLCertificateKeyFile /opt/ssl/cert.key    SSLCACertificateFile /opt/ssl/cert.ca-bundle      SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown          RewriteEngine On  RewriteCond %{HTTP:Connection} Upgrade [NC]  RewriteCond %{HTTP:Upgrade} websocket [NC]  RewriteRule ^/ws(.*) ws://localhost:8080/crownies/ws/$1 [P,L]    ProxyRequests off  lt;Location /gt;  ProxyPass http://localhost:8080/  ProxyPassReverse http://localhost:8080/  lt;/Locationgt;        lt;/VirtualHostgt;  

Заголовки запросов из Google Chrome:

 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: Upgrade Cookie: user=blah-blah-blah Host: editor.xyzw.com Origin: https://editor.xyzw.com Pragma: no-cache Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits Sec-WebSocket-Key: blah-blah-blah== Sec-WebSocket-Version: 13 Upgrade: websocket User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36  

Пожалуйста, в чем может быть проблема с моим хостингом?

Ответ №1:

Я думаю Location , что имеет приоритет над переписыванием, поэтому, когда пути пересекаются, вы должны придерживаться переписывания. Не забудьте установить соответствующие тайм-ауты и для бэкенда, например (подстраивайтесь под ваши потребности).:

 # Worker Options lt;Proxy http://localhost:8080gt;  ProxySet keepalive=On smax=1 connectiontimeout=10 retry=10 timeout=30 ttl=15 lt;/Proxygt;  lt;Proxy ws://localhost:8080gt;  ProxySet keepalive=On smax=1 connectiontimeout=10 retry=10 timeout=900 ttl=15 lt;/Proxygt;  # Rewrites RewriteEngine On  RewriteCond %{HTTP:Connection} Upgrade [NC] RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteRule /ws/(.*) ws://localhost:8080/crownies/ws/$1 [P,L]  RewriteRule /(.*) http://localhost:8080/$1 [P,L] ProxyPassReverse / http://localhost:8080/