我有一个节点快速网络服务器,使用pm2集群在端口8080-8083的我的debian linux机器上启动。
我在服务器上安装了nginx反向代理服务器,以正确重定向到使用以下/etc/nginx/sites-available/default
server {
listen 80;
listen [::]:80;
server_name a.registered.dns.domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name a.registered.dns.domain.com;
ssl_certificate /home/admin/certs/a.registered.dns.domain.com.chained.crt;
ssl_certificate_key /home/admin/certs/a.registered.dns.domain.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://nodes;
}
location /socket.io {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://nodes;
# enable WebSockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
}
}
upstream nodes {
# enable sticky session based on IP
ip_hash;
server 127.0.0.1:8080 fail_timeout=20s;
server 127.0.0.1:8081 fail_timeout=20s;
server 127.0.0.1:8082 fail_timeout=20s;
server 127.0.0.1:8083 fail_timeout=20s;
}
这将在服务器和客户端之间创建websocket,如此处所示。
将状态从101的长轮询升级到websocket。如果我从通过套接字发送发射消息的站点执行某些操作,则服务器会接收到该消息并对其进行适当的操作。到目前为止一切都很好。
但是,如果我在其他地方进行了一些操作导致服务器向客户端发出信号,则可以在服务器上使用DEBUG='socket.io*' pm2 restart http-server --update-env
看到套接字信息已接收并发出,客户端永远不会收到数据包。这应该。可以通过在Chrome开发工具中从控制台运行localStorage.debug = '*';
来确认这一点。
看到发出来的东西,只有在网络套接字上的ping和pong数据包。
如果我打开端口8080-8083并仅使用http连接,这一切都将正常工作。因此,好像我的网站的ssl连接的nginx反向代理存在问题。