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 Proxy192.168.14.10userictsc2020

解説

この問題で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 が入力されるまで続く

と返ってくるような解答に満点をつけました。