nginxでServer-Sent Eventsから受信できないとき

Pocket

現象

ローカルでの動作確認では問題なくServer-Sent Eventsが動作していたのですが、クラウドインフラ(AWS)上で動作確認時に以下のように保留中となりレスポンスが受信できない現象が発生しました。

いろんなところを触ってもなかなか解決せず対応に結構時間がかかってしまったので備忘録として残します。

原因

nginx – upstreamでkeepaliveさせるには追加設定が必要のようです。

解決策

解決策は2つあります。

サーバーサイドからJavascriptのEventSourceに渡すレスポンスにヘッダを付与

以下はgo言語の場合です。

w.Header().Set("X-Accel-Buffering", "no")

Nginx側の設定を変更する

*.confファイルに記載します。

参考

proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;

所感

サーバーサイド側に記載したほうが設定漏れやその他影響範囲を考えると良いように思えますねー