我有 :
Apache(v2.4)在我服务器的端口80上www.domain1.com,启用了 mod_proxy 和 mod_proxy_wstunnel
Apache
www.domain1.com
node.js + socket.io 在同一服务器的端口3001上。
node.js + socket.io
www.domain2.com由于使用此处描述的方法,访问(使用端口80)将重定向到2 .。我已经在Apache配置中对此进行了设置:
www.domain2.com
<VirtualHost *:80> ServerName www.domain2.com ProxyPass / http://localhost:3001/ ProxyPassReverse / http://localhost:3001/ ProxyPass / ws://localhost:3001/ ProxyPassReverse / ws://localhost:3001/ </VirtualHost>
它适用于除websocket部分之外的所有内容:ws://...不会像代理服务器那样传输。
ws://...
访问上的页面时www.domain2.com,我有:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
问: 如何也使Apache代理WebSockets?
由于这个话题,我终于设法做到了。
去做:
1)安装Apache 2.4(不适用于2.2),然后执行以下操作:
a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel
2)nodejs在端口3001上运行
nodejs
3)在Apache配置中执行此操作
<VirtualHost *:80> ServerName www.domain2.com RewriteEngine On RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:3001/$1 [P,L] ProxyPass / http://localhost:3001/ ProxyPassReverse / http://localhost:3001/ </VirtualHost>
注意:如果在使用websocket的同一服务器上有多个服务,则可能需要这样做以将它们分开。