Websockets与nginx和cloudflare保持断开连接

6
我的设置是cloudflare -> nginx -> node.js服务器。我确认这不是node.js服务器的问题,问题似乎是cloudflare和nginx的组合。只有nginx和node.js时它运行得很好。
以下是websocket连接的nginx日志: 162.158.75.125 - - [29/Oct/2016:00:01:47 +0000] "GET / HTTP/1.1" 101 1047 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
nginx配置:
server {
    listen 443 ssl;
    server_name vectorwar.io;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass       http://localhost:7000;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 31104000s;
        proxy_connect_timeout 31104000s;
        proxy_send_timeout 31104000s;

    }
}

我可以在CloudFare中使用webSockets吗?(https://support.cloudflare.com/hc/en-us/articles/200169466-Can-I-use-CloudFlare-with-WebSockets-) - jfriend00
那并不能解决我的问题。 - user1781498
可能是管道中的某个地方超时了?当WebSocket保持静默时,它保持打开状态多长时间?定期通过WS连接发送ping/pong样式的消息是否可以防止其断开连接? - Brian
2个回答

2

您尝试过不使用SSL设置Websocket吗?

我曾经遇到过通过SSL建立的Websockets在约45秒后自动断开连接的情况。使用不安全的连接可以解决这个问题。显然这不是理想的解决方案,但您可以尝试一下,看看是否至少可以解决断开连接的问题。


似乎我只需要每隔几秒发送一个数据包,就可以防止超时。 - user1781498

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接