SockJS + Proxy + Apache2:wss://不工作,仅轮询
SockJS + Proxy + Apache2 : wss:// not working, only polling
我得到以下设置:
- 前端使用 SockJS
- 网关服务器,重定向 Socket-Requests 到 SockJS 节点服务器,其他一切到负载均衡器
Websockets 正在运行,但仅适用于轮询。
尝试连接到 sockJS 服务器时,我的浏览器出现以下错误:
websocket.js:6 WebSocket connection to 'wss://mypage.com/... failed: Error during WebSocket handshake: Unexpected response code: 500
。 SockJS 服务器未记录任何错误。
我可以在 devtools 中看到有一个 https://mypage.com/socket/225/ye1ifrre/xhr_streaming?...
HTTP 轮询打开,但 wss:// 似乎不起作用。
这是我的网关apache2 VHOST(我用...
替换了一些内容):
<VirtualHost *:80>
# redirect all to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
# WebApp VHOST
ServerName mypage.com
# Set HSTS
LoadModule headers_module modules/mod_headers.so
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ...
SSLCertificateFile /...
SSLCertificateKeyFile /...
SSLCACertificateFile /...
SetEnvIf Referer mypage.com localreferer
<Location /api>
Order deny,allow
Allow from all
</Location>
# Proxy All to Application Server Load Balancer except websocket
ProxyPreserveHost On
# Websocket Proxy Bypass
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://10.2.0.7:9000%{REQUEST_URI} [P]
ProxyPass /socket http://10.2.0.7:9000/socket
ProxyPassReverse /socket http://10.2.0.7:9000/socket
ProxyRequests off
ProxyPass / http://10.2.0.10:80/
ProxyPassReverse / http://10.2.0.10:80/
# Set response headers
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "..."
Header set Referrer-Policy "same-origin"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
</VirtualHost>
在我的 sockJS 服务器上,我正在监听 10.2.0.7:9000
。在我们的测试环境中,sockJS 服务器在与网关相同的 VM 上运行,它可以正常工作。在那里我将 websockets 请求代理到 127.0.0.1:9000
并且 sockJS 服务器也在 127.0.0.1:9000
.
上侦听
我正在使用 SockJS 客户端 1.4.0
和 SockJS 节点服务器 0.3.20
。
我在这里错过了什么?我的 CSP Headers 会不会有问题?我想我应该从 Chrome.
收到相关错误
我读到这可能是 sockJS 没有监听 127.0.0.1
的问题,或者来自客户端的 socket-request 必须对 IP 地址而不是域进行。还有其他人遇到过同样的问题吗?
查看我的 Apache 错误日志后,我看到消息 No protocol handler was valid for the URL /socket/316/i0hkgyrq/websocket. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
。
原来我必须通过 运行 命令 sudo a2enmod proxy_wstunnel
启用代理网络隧道 mod。现在一切正常,我在 WS
-Tab
下的 devtools 中看到了 websocket 连接
我得到以下设置:
- 前端使用 SockJS
- 网关服务器,重定向 Socket-Requests 到 SockJS 节点服务器,其他一切到负载均衡器
Websockets 正在运行,但仅适用于轮询。 尝试连接到 sockJS 服务器时,我的浏览器出现以下错误:
websocket.js:6 WebSocket connection to 'wss://mypage.com/... failed: Error during WebSocket handshake: Unexpected response code: 500
。 SockJS 服务器未记录任何错误。
我可以在 devtools 中看到有一个 https://mypage.com/socket/225/ye1ifrre/xhr_streaming?...
HTTP 轮询打开,但 wss:// 似乎不起作用。
这是我的网关apache2 VHOST(我用...
替换了一些内容):
<VirtualHost *:80>
# redirect all to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
# WebApp VHOST
ServerName mypage.com
# Set HSTS
LoadModule headers_module modules/mod_headers.so
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ...
SSLCertificateFile /...
SSLCertificateKeyFile /...
SSLCACertificateFile /...
SetEnvIf Referer mypage.com localreferer
<Location /api>
Order deny,allow
Allow from all
</Location>
# Proxy All to Application Server Load Balancer except websocket
ProxyPreserveHost On
# Websocket Proxy Bypass
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://10.2.0.7:9000%{REQUEST_URI} [P]
ProxyPass /socket http://10.2.0.7:9000/socket
ProxyPassReverse /socket http://10.2.0.7:9000/socket
ProxyRequests off
ProxyPass / http://10.2.0.10:80/
ProxyPassReverse / http://10.2.0.10:80/
# Set response headers
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "..."
Header set Referrer-Policy "same-origin"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
</VirtualHost>
在我的 sockJS 服务器上,我正在监听 10.2.0.7:9000
。在我们的测试环境中,sockJS 服务器在与网关相同的 VM 上运行,它可以正常工作。在那里我将 websockets 请求代理到 127.0.0.1:9000
并且 sockJS 服务器也在 127.0.0.1:9000
.
我正在使用 SockJS 客户端 1.4.0
和 SockJS 节点服务器 0.3.20
。
我在这里错过了什么?我的 CSP Headers 会不会有问题?我想我应该从 Chrome.
收到相关错误我读到这可能是 sockJS 没有监听 127.0.0.1
的问题,或者来自客户端的 socket-request 必须对 IP 地址而不是域进行。还有其他人遇到过同样的问题吗?
查看我的 Apache 错误日志后,我看到消息 No protocol handler was valid for the URL /socket/316/i0hkgyrq/websocket. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
。
原来我必须通过 运行 命令 sudo a2enmod proxy_wstunnel
启用代理网络隧道 mod。现在一切正常,我在 WS
-Tab