【问题标题】:nginx websocket connections timeouts after 30 seconds30 秒后 nginx websocket 连接超时
【发布时间】:2018-05-07 20:49:22
【问题描述】:

我有一个在 nginx 服务器上运行的带有 socket.io 的 node.js 应用程序。问题是 websocket 连接在连接后 30 秒被 nginx 超时,即使连接并没有一直保持空闲状态。这是我的 nginx.conf 文件;

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}


stream {
    upstream cluster {
        least_conn;
        server xx.xxx.xxx.xx:2157;
    }

    server {
        listen 7000;
        preread_timeout 86400s;
        proxy_timeout 86400s;
        proxy_pass cluster;
    }
}

nginx版本为:1.12.2

【问题讨论】:

  • 你有没有让 websockets 工作?它是根本不工作还是在 30 秒后工作并停止?
  • websocket 工作正常,在 30 秒过去之前没有问题。客户端建立连接 30 秒后,nginx 强制关闭该客户端的 websocket 连接,但服务器保持开启并接受进一步的连接(并且在 30 秒后超时)
  • 看起来与超时配置类似的问题:stackoverflow.com/questions/10550558/…
  • 我实际上已经尝试过该帖子中所说的内容,但是由于这是一篇旧帖子,而且我现在使用的是最新版本的 nginx,因此“stream”甚至不支持 proxy_read_timeout 指令s了

标签: node.js nginx websocket


【解决方案1】:

PS:实际上是node.js应用本身关闭了客户端的连接。

我已将这行代码 io.set('heartbeat timeout', 24*60*60); 添加到我的 node.js 应用程序中,超时不再是问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2020-05-04
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多