套接字IO网络套接字问题

时间:2019-04-26 22:39:04

标签: node.js nginx socket.io

我有一个节点快速网络服务器,使用pm2集群在端口8080-8083的我的debian linux机器上启动。 我在服务器上安装了nginx反向代理服务器,以正确重定向到使用以下/etc/nginx/sites-available/default

的node-express服务器
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,如此处所示。 chrome network

将状态从101的长轮询升级到websocket。如果我从通过套接字发送发射消息的站点执行某些操作,则服务器会接收到该消息并对其进行适当的操作。到目前为止一切都很好。

但是,如果我在其他地方进行了一些操作导致服务器向客户端发出信号,则可以在服务器上使用DEBUG='socket.io*' pm2 restart http-server --update-env看到套接字信息已接收并发出,客户端永远不会收到数据包。这应该。可以通过在Chrome开发工具中从控制台运行localStorage.debug = '*';来确认这一点。

看到发出来的东西,只有在网络套接字上的ping和pong数据包。

如果我打开端口8080-8083并仅使用http连接,这一切都将正常工作。因此,好像我的网站的ssl连接的nginx反向代理存在问题。

0 个答案:

没有答案