我试图在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配置如下:
<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>我还尝试将RewriteRule /(.*)更改为wss://localhost:8080/$1 [P,L],但仍然引发了相同的错误。似乎找不到其他答案来解决这个问题。
我相信我正在使用socket.io 2.0,并且在客户端它是以这样的方式连接起来的:
var socket = io();这就是困扰我的地方,

似乎有些连接正在通过,但其中一条不存在。
发布于 2018-02-25 06:53:19
查看如何在Apache中设置连接升级。这就是我需要配置nginx的地方。另外,这些http请求可以是为客户端文件提供服务的socketio。
还请查看以下内容:wstunnel.html
编辑:
如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发布于 2020-03-20 17:46:42
在Centos 7上使用Apache 2.4.6
您需要做两件事,首先,在客户端以下列方式启动socket-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>使用这些配置,您还可以在同一台服务器上和不同的应用程序上拥有多个套接字连接。
https://stackoverflow.com/questions/48970876
复制相似问题