你好,我用node.js socket.io 做了一个项目,用apache2 做了代理。一切正常,项目工作正常,但有时我的所有连接都会发送连接错误,消息为“会话 ID 未知”。我尝试了将服务器从 apache2 更改为 nginx 的所有方法,但它也不起作用。连接每隔 1 小时发送一次该错误消息。我该如何解决我不知道的问题。我为此工作了大约8天。我的项目进展缓慢。有人可以帮忙吗?
版本
Apache2: Apache/2.4.54 (Ubuntu)
Socket.io Server: 4.5.1
Socket.io Client: 4.5.1
Apache.conf
<VirtualHost _default_:443>
ServerName socket.myproject.com
SSLEngine On
SSLCertificateFile /etc/ssl/socket/primary.crt
SSLCertificateKeyFile /etc/ssl/socket/private.key
SSLCertificateChainFile /etc/ssl/socket/intermediate.crt
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule headers_module modules/mod_headers.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
# User daemon
# Group daemon
Header add Set-Cookie "SERVERID=sticky.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy "balancer://nodes_polling">
BalancerMember "http://localhost:1002" route=prod
ProxySet stickysession=SERVERID
</Proxy>
<Proxy "balancer://nodes_ws">
BalancerMember "ws://localhost:1002" route=prod
ProxySet stickysession=SERVERID
</Proxy>
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) balancer://nodes_ws/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) balancer://nodes_polling/$1 [P,L]
ProxyTimeout 3
</VirtualHost>
客户
this.IO = io(AppConstants.socketBaseUrl, {
query: { token:"blablabla...." },
path: '/socket.io',
withCredentials: true,
transports: ['websocket', 'polling'],
secure: true,
});
服务器 Node.js
const socketServer = require('socket.io')(Server, {
transports: ['websocket', 'polling'],
cors: {
origin: '*',
credentials: true,
methods: ['GET', 'POST'],
},
});
你能解决这个问题吗?有什么我可以尝试的吗?我也面临同样的情况