我通过Nginx设置有一个Node.js,它涉及服务器发送的事件。
不管我有什么Nginx配置,sse的连接都会在60秒后断开并再次重新初始化。如果我直接在服务节点的端口上连接到应用程序,则不会发生这种情况,因此这显然是一些Nginx代理问题。
我想在sse连接上没有超时。那可能吗?我试过的调整send_timeout
,keepalive_timeout
,client_body_timeout
和client_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;
}
}
对我自己回答。实际上,解决方案并不难找到,只是需要仔细研究nginx文档。
proxy_read_timeout
是负责此操作的指令,默认情况下将其设置为60秒。因此可以通过设置以下内容轻松修复:
proxy_read_timeout 24h;
设置0
将不起作用,它实际上会使您的所有连接断开,因此我们需要提出足够长的超时时间。
修复该问题后,我还处理了另一个问题,但这一次与浏览器如何处理连接有关。出于某种原因,闲置5分钟后,浏览器会静默丢弃该连接。更糟糕的是,双方都没有被告知已被丢弃,因为双方仍然看起来好像在线,但数据无法通过。解决的方法是在间隔的基础上发送一些保持活动的ping(纯sse注释效果很好)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句