#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/