問題
- FlaskのアプリケーションでServer-Sent Events(SSE)による更新を行っている
- Nginxに接続しなければ正常に動作する
- Nginxに接続すると,SSEの処理だけが絶望的に遅れる
原因
Nginxのリバースプロキシによってバッファリングが行われるため
解決
FlaskからJavascriptのEventSource
に渡すレスポンスに,ヘッダX-Accel-Buffering: no
1を付与する.
hoge.py
# Returns a response for the JS EventSource
@flask_app.route( "/stream" )
def stream():
response = flask.Response( event_stream( "foo" ),
mimetype = "text/event-stream" )
response.headers["X-Accel-Buffering"] = "no"
return response
その他
Nginx側の設定に以下を追記すれば良いとの情報がみられる2が,Flask側でSSEの処理に絞って適用した方が綺麗だと考えられる.
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;