我正在编写一个使用长轮询向客户端推送消息的应用程序。但它在发送完消息后不会结束请求:它只是刷新。即使我通过 nginx 代理它并通过互联网访问它,它也能正常工作。
upstream app {
server localhost:1000;
}
server {
listen 80;
location / {
proxy_pass http://app;
client_max_body_size 20m;
proxy_redirect off;
send_timeout 86400;
proxy_read_timeout 86400;
proxy_buffering off;
gzip off;
}
}
也就是说,直到我在 nginx 上启用 SSL。然后它就不会再刷新了。我可以通过设置ssl_buffer_size
为 1 来解决这个问题,但这会对性能产生负面影响。
server {
listen 443;
ssl_certificate cert.pem;
ssl_certificate_key key.pem;
ssl_buffer_size 1;
...
}
对于任何其他缓冲区大小,除非请求结束,否则 NginX 不会刷新最后一个未完成的缓冲区。有什么办法可以强制刷新吗?我想要这样做是不是很愚蠢?
我注意到,只要数据量低于 61450 字节,刷新就会起作用。如果您尝试刷新的数据量远远超过这个数字,它就会开始缓冲。