Node.js 在Apache反向代理上运行Socket.io
我试图在Apache后面运行NodeJS,但到目前为止,我仍然遇到Socket.io问题 直接访问应用程序没有问题,但每当我通过我的域进行访问时,socket.io就会抛出以下错误:Node.js 在Apache反向代理上运行Socket.io,node.js,apache,socket.io,Node.js,Apache,Socket.io,我试图在Apache后面运行NodeJS,但到目前为止,我仍然遇到Socket.io问题 直接访问应用程序没有问题,但每当我通过我的域进行访问时,socket.io就会抛出以下错误: Firefox can’t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB. 我的Apache配置如下:
Firefox can’t establish a connection to the server at wss://example.com/socket.io/?EIO=3&transport=websocket&sid=X-hLU73t7ojk2zoRAAAB.
我的Apache配置如下:
<VirtualHost _default_:443>
ServerName example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
ProxyRequests off
ProxyVia on
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
ProxyPass /socket.io http://localhost:8080/socket.io
ProxyPassReverse /socket.io http://localhost:8080/socket.io
<Location />
ProxyPass http://127.0.0.1:8080/
ProxyPassReverse http://127.0.0.1:8080/
</Location>
#ProxyPass / http://localhost:8080/
#ProxyPassReverse / http://localhost:8080/
# BrowserMatch "MSIE [2-6]" \
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
这让我很烦
似乎有些连接正在通过,但有一个没有通过。研究在Apache中设置连接升级。这就是我配置nginx所需要的。此外,这些http请求可以是为客户机文件提供服务的socketio 此外,请注意: 编辑: 如mod_proxy_wstunnel中所述,通过传递ws/wss代理解决了该问题。apache虚拟主机配置应具有以下内容:
ProxyPass /socket.io/ ws://localhost:8080/socket.io
ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io
与此相反:
ProxyPass /socket.io http://localhost:8080/socket.io
ProxyPassReverse /socket.io http://localhost:8080/socket.io
研究在Apache中设置连接升级。这就是我配置nginx所需要的。此外,这些http请求可以是为客户机文件提供服务的socketio 此外,请注意: 编辑: 如mod_proxy_wstunnel中所述,通过传递ws/wss代理解决了该问题。apache虚拟主机配置应具有以下内容:
ProxyPass /socket.io/ ws://localhost:8080/socket.io
ProxyPassReverse /socket.io/ ws://localhost:8080/socket.io
与此相反:
ProxyPass /socket.io http://localhost:8080/socket.io
ProxyPassReverse /socket.io http://localhost:8080/socket.io
在Centos 7上使用Apache 2.4.6 您需要做两件事,首先,在客户端,通过以下方式启动套接字io:
var socket_io = io(wss://YOUR-IP/,{
path: '/monitor-01',
transports: ['websocket']
});
然后,在apache端,必须执行以下配置:
<VirtualHost *:443>
.
.
.
ProxyPass /monitor-01 ws://localhost:4000/socket.io
ProxyPassReverse /monitor-01 ws://localhost:4000/socket.io
</VirtualHost>
通过这些配置,您还可以在同一台服务器上为不同的应用程序提供多个套接字连接。在Centos 7上使用Apache 2.4.6 您需要做两件事,首先,在客户端,通过以下方式启动套接字io:
var socket_io = io(wss://YOUR-IP/,{
path: '/monitor-01',
transports: ['websocket']
});
然后,在apache端,必须执行以下配置:
<VirtualHost *:443>
.
.
.
ProxyPass /monitor-01 ws://localhost:4000/socket.io
ProxyPassReverse /monitor-01 ws://localhost:4000/socket.io
</VirtualHost>
通过这些配置,您还可以在同一服务器上为不同的应用程序建立多个套接字连接