Server Sent Eventsが動作しない‼
概要
reverse proxyとして、nginxを構築した。webページ自体は見れるが、sse(server sent events)はうまく動作しない。原因を糾明してsseが動作するようにしてほしい。
前提条件
初期状態
Reverse Proxy上で $ curl -N localhost/event
をしても応答がない。
終了状態
Reverse Proxy上で $ curl -N localhost/event
をしたら、
$ curl -N localhost/event
data: 1
data: 2
data: 3
...以下 Ctrl+C が入力されるまで続く
接続情報
VM名 | ホスト名 | ユーザ | パスワード |
---|---|---|---|
Reverse Proxy | 192.168.14.10 | user | ictsc2020 |
解説
この問題でServer Sent Eventsがうまく動作しなかった原因は、/etc/nginx/nginx.conf内のproxy_buffering on;
だったことです。nginxのproxy_bufferingが有効な状態だとnginxがバッファリングしてしまい、クライアントがレスポンスを受け取れません。
想定解
/etc/nginx/nginx.conf内のproxy_buffering on;
をproxy_buffering off;
に置き換えて、nginxを再起動させること
その他解法
nginxがデフォルトで使用するhttp/1.0
はkeep-aliveを使用することは非推奨とされているので、
/etc/nginx/nginx.conf内のproxy_buffering on;
をproxy_http_version 1.1;
に置き換えて、nginxを再起動させることでもServer Sent Eventsを動作させることができます。
採点基準
部分点は付けず、
Reverse Proxy上で $ curl -N localhost/event
をしたら、
$ curl -N localhost/event
data: 1
data: 2
data: 3
...以下 Ctrl+C が入力されるまで続く
と返ってくるような解答に満点をつけました。