Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
冲洗NginX';在长轮询期间使用SSL缓冲区_Ssl_Nginx_Https_Go_Long Polling - Fatal编程技术网

冲洗NginX';在长轮询期间使用SSL缓冲区

冲洗NginX';在长轮询期间使用SSL缓冲区,ssl,nginx,https,go,long-polling,Ssl,Nginx,Https,Go,Long Polling,我正在编写一个应用程序,它使用长轮询将消息推送到客户端。但是,当完成发送消息时,它不会结束请求:它只是刷新。它工作得很好,即使我通过nginx代理它并通过互联网访问它 upstream app { server localhost:1000; } server { listen 80; location / { proxy_pass http://app; client_max_body_size 20m; proxy

我正在编写一个应用程序,它使用长轮询将消息推送到客户端。但是,当完成发送消息时,它不会结束请求:它只是刷新。它工作得很好,即使我通过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\u buffer\u size
设置为1来解决这个问题,但这会对性能产生负面影响

upstream app {
  server localhost:1000;
}

server {
    listen 443;
    ssl_certificate cert.pem;
    ssl_certificate_key key.pem;
    ssl_buffer_size 1;
    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;
    }
}

我用Go编写了我的应用程序,我使用的是
net/http
中的标准
Flush()。我尝试使用
Hijack
获取常规TCP缓冲区和
Flush()
,但仍然不起作用。

这不是一个Go问题,而是一个Nginx配置问题。很可能是Nginx在隐瞒您的数据

您可以尝试避免这种情况。尝试:

server {
    listen 443;
    ssl_certificate cert.pem;
    ssl_certificate_key key.pem;
    ssl_buffer_size 1;

    proxy_buffering off;
}

注意:未测试,但请尝试一下。

您似乎已经发现这是因为如果在nginx中使用SSL缓冲。你到底想解决什么问题?在nginx中启用ssl时如何进行服务器推送如果nginx没有某种类型的最大延迟/刷新间隔选项(我想没有),那么你需要将缓冲区设置为与消息大小一起刷新的值,或者填充消息。如果不能接受,请尝试其他方法,如haproxy或Go crypto/tls包。仅供参考,来自TLS连接的
http.ResponseWriter
是一个
http.Flusher
。我不知道haproxy的行为是什么。这里唯一的答案似乎是“不要使用nginx”。如果我升级请求以使用WebSocket、http2或spdy,服务器推送nginx ssl会更好吗?这已经在我上面的配置中了。不过这并不重要,因为ssl缓冲区是独立的。@NickRetallack这不是100%清楚的,因为您没有为ssl配置粘贴整个服务器块。