如何在服务器推送请求期间刷新 NginX 的 SSL 缓冲区

如何在服务器推送请求期间刷新 NginX 的 SSL 缓冲区

我正在编写一个使用长轮询向客户端推送消息的应用程序。但它在发送完消息后不会结束请求:它只是刷新。即使我通过 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 字节,刷新就会起作用。如果您尝试刷新的数据量远远超过这个数字,它就会开始缓冲。

相关内容