通过Nginx在Node.js上的服务器发送事件连接超时

马里乌斯·诺瓦克(Mariusz Nowak)

我通过Nginx设置有一个Node.js,它涉及服务器发送的事件。

不管我有什么Nginx配置,sse的连接都会在60秒后断开并再次重新初始化。如果我直接在服务节点的端口上连接到应用程序,则不会发生这种情况,因此这显然是一些Nginx代理问题。

我想在sse连接上没有超时。那可能吗?我试过的调整send_timeoutkeepalive_timeoutclient_body_timeoutclient_header_timeout,但它不会改变任何东西。以下是我的Nginx配置。

upstream foobar.org {
   server 127.0.0.1:3201;
}

server {
  listen 0.0.0.0:80;
  server_name   example.org;

  client_max_body_size 0;
  send_timeout 600s;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;

    proxy_pass http://example.org/;
    proxy_redirect off;

    proxy_set_header Connection '';
    proxy_http_version 1.1;
    chunked_transfer_encoding off;
    proxy_buffering off;
    proxy_cache off;
  }
}
马里乌斯·诺瓦克(Mariusz Nowak)

对我自己回答。实际上,解决方案并不难找到,只是需要仔细研究nginx文档。

proxy_read_timeout是负责此操作的指令,默认情况下将其设置为60秒。因此可以通过设置以下内容轻松修复:

proxy_read_timeout 24h;

设置0将不起作用,它实际上会使您的所有连接断开,因此我们需要提出足够长的超时时间。

修复该问题后,我还处理了另一个问题,但这一次与浏览器如何处理连接有关。出于某种原因,闲置5分钟后,浏览器会静默丢弃该连接。更糟糕的是,双方都没有被告知已被丢弃,因为双方仍然看起来好像在线,但数据无法通过。解决的方法是在间隔的基础上发送一些保持活动的ping(纯sse注释效果很好)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过Nginx的EventSource /服务器发送的事件

MongoDB服务器选择超时与Nginx,Node.js

通过https nginx网站将HTTP连接到Node服务器

Node.js - 在“连接”事件上区分服务器连接和断开连接

SSE(服务器已发送事件),侦听Node.js服务器中的事件并将其发布到其他服务器

通过Nginx的LAMP + Node.js

如何通过node.js服务器发送事件发送命令行输出并在浏览器中显示

在Node.js中实现服务器发送事件的简单方法?

服务器发送事件通过post方法传递参数

ServiceStack:通过WebSocket选择服务器发送的事件

如何使 node.js 服务器无法通过浏览器访问但仍可用于 nginx?

获取在Node.js服务器上发送数据的Ajax

在服务器端Node.JS上倒计时并发送页面响应

Sublime Text 3 SFTP 通过 SFTP 连接到远程服务器时立即“连接超时”

与在Android上提供API的Node.js服务器建立安全连接

无法连接到我的VPS上的node.js服务器

在Vagrant中将Node.js连接到Apache服务器上的Postgres

如何通过click事件与Node.js服务器通信?

如何通过画布在服务器上发送饼图

如何通过403阻止Nginx服务器上的站点

为什么我会看到使用 js 服务器通过 php 发送事件的未指定 sse 错误?

通过Nginx运行两个Node.js实例

Node.js:通过socketio将客户端与服务器断开连接

通过Node.js服务器后端连接两个iOS设备

通过Node.js与RDS MySQL / Aurora无服务器群集的SSL连接失败

无法加载资源:服务器响应状态为504(从服务器读取响应时超时)Node.js,Nginx

发送整数值以响应Node JS服务器

通过 ssh 在专用服务器上安装 node.js

无法连接到Android中的Node JS服务器