提问者:小点点

如何在apache运行的端口443上运行socket.io?


我需要在端口 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 HTTPS网站上的socket.io工作正常,但我得到了超文本传输协议404错误。我想问题是在rewriteCond。

websocket.js:112WebSocket连接到wss://mysite.com/socket.io/?id=11518237


共2个答案

匿名用户

试试mod_proxy_wstunnel

它支持将web套接字连接隧穿到后端web套接字服务器。连接将自动升级为websocket连接

https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

匿名用户

为不同的用途使用不同的IP地址。你有