【发布时间】:2019-01-11 02:09:35
【问题描述】:
我需要在端口 443 上运行 socket.io(其中 apache 使用 Let's Encrypt 运行 https 站点)
这个想法是使用 apache 代理将流量重定向到 socket.io 端口。 我找到了解决方案:
<VirtualHost *:443>
ServerName mysite.com
ServerAlias www.mysite.com
SSLEngine on
SSLProxyEngine On
ProxyRequests Off
SSLCertificateFile /etc/apache2/ssl/mysite.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/mysite.com.key
SSLCertificateChainFile /etc/apache2/ssl/ca.cer
DocumentRoot /var/www/errorPages
ErrorDocument 503 /503.html
ProxyPass /503.html !
ProxyPass / http://localhost:3999/
ProxyPassReverse / http://localhost:3999/
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:3999%{REQUEST_URI} [P]
</VirtualHost>
我在端口 3999 上运行 socket.io HTTPS 站点工作正常,但是我收到了 http 404 错误。 我想问题出在 rewriteCond 上。
websocket.js:112 WebSocket 连接到 'wss://mysite.com/socket.io/?id=11518237&username=john 失败:错误 在 WebSocket 握手期间:意外的响应代码:404
【问题讨论】:
-
出于好奇,为什么要使用这样的架构?据我了解,两者都是服务器本身对吗?
-
我有同样的问题 - 你找到解决方案了吗? (stackoverflow.com/questions/60356062/…)
标签: apache websocket socket.io mod-proxy-wstunnel