Flask SSE 和 Nginx 无法正常工作

Vit*_*lar 5 python nginx flask server-sent-events

我遇到了在 Nginx 上运行 SSE 的问题。我有一个正在使用 Flask 的 Web 应用程序,并且我正在使用一个名为flask-sse将事件发送到 JS 端的模块。

我用来gunicorn处理请求,我将其作为 Nginx 配置:

upstream backend {
        server 127.0.0.1:5000;
        keepalive 100;
}

server {
        listen 80;
        access_log /var/log/nginx/client-access.log;
        error_log /var/log/nginx/client-error.log;

        location / {
                include proxy_params;
                proxy_pass http://backend;
                proxy_buffering off;
                proxy_cache off;
                proxy_set_header Host $host;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_http_version 1.1;
                chunked_transfer_encoding off;
                proxy_request_buffering off;

        }
}
Run Code Online (Sandbox Code Playgroud)

接收事件的端点已打开/stream。通过查看 Nginx 日志,我发现到此端点的第一次连接始终是 504 错误,如下所示:

10.2.2.254 - - [09/Apr/2018:09:06:14 +0000] "GET /stream HTTP/1.1" 504 585 "http://address/results" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

该 Nginx 在名为 Sophos ( https://www.sophos.com/en-us.aspx )的网关后面运行。我不知道这是否会导致问题,但是当我从本地主机运行时,一切正常。

另外,我认为非常奇怪的是,第一个调用(我上面发布的那个调用)返回 504,但随后的调用返回 200,这打破了我的想法。

你们对如何解决这个问题有什么想法吗?我是否缺少一些 Nginx 配置?

谢谢