- 更新日: 2016年12月21日
- CentOS & Linux
upstream sent too big header while reading response header from upstream(Nginx/Rails)
Rails アプリケーションを動かしている Nginx サーバーの production 環境で、502 エラーが発生したので原因を探りました。
Nginx のエラーログを確認
まずは、Nginx のエラーログを確認しました。
1 2 3 4 |
$ sudo tail -f /var/log/nginx/error.log 2016/11/22 10:56:11 [error] 1397#1397: *10 upstream sent too big header while reading response header from upstream, client: ***.***.***.***, server: server.host, request: "GET /some/path HTTP/2.0", upstream: "***/some/path", host: "server.host" |
上記のように、
1 2 3 |
upstream sent too big header while reading response header from upstream |
というエラーメッセージが沢山記録されていた。訳しますと…
「upstream からレスポンスヘッダーを読み出す際に、upstream が大きすぎるヘッダーを送信しています」とのことで、クッキーのデータが大きすぎたのが原因っぽい。
ということで、以下2つの対策を行いました。
セッション管理を cookie store から active record store に変更
Rails アプリケーションのセッション管理を、クッキーに保存から ActiveRecord に保存するように変更しました。作業手順の詳細は以下記事を参考。
Rails4でsession storeをActiveRecordに変更 | EasyRamble
activerecord-session_store という gem を利用します。
Nginx 設定ファイルを編集
unicorn をアプリケーションサーバー、Nginx をリバースプロキシとして利用している環境だったので、Nginx の設定ファイルでプロキシされたサーバー(unicorn)からのレスポンスを読むためのバッファーサイズ等の調節を行いました。
nginx.conf
1 2 3 4 5 6 7 |
http { proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } |
デフォルトより大きい値を指定した。proxy_buffer_size などの詳細については以下参考。
Module ngx_http_proxy_module
Nginx をリバースプロキシ(キャッシュ) として使ってみた|レンタルサーバー・自宅サーバー設定・構築のヒント
nginx.conf の調節については、セッション管理を ActiveRecord で行うの場合は、なくても良さそう。事実、activerecord-session_store 導入だけで、Nginx の「upstream sent too big header」エラーは発生しなくなりました。ということで、proxy_buffer_size 等の設定は最終的には元に戻しました。
以上の対応で、表題の Nginx エラーは発生しなくなった。
- – 参考リンク –
- Railsを本番稼働させるときはnginxとsession storeの設定に注意 – Qiita
- session – Upstream too big – nginx + codeigniter – Stack Overflow
- Nginx Proxy: upstream sent too big header while reading response header from upstream
- CentOS & Linux の関連記事
- Job for nginx.service failedのNginxエラー
- Can’t get information about user clamav(clamdエラー)
- STDERR: Exception in thread “main” java.lang.InternalErrorエラー
- Linuxサーバー容量を確認するコマンドdf,duをマスターする!
- rmでファイル削除後にdf -hで容量が減らない時の対処(Linux)
- Apacheをローカルネットワークのみに公開にする
- logwatchからのメールが来ないと思ったら…
- Linuxサーバの負荷や使用率を調査するコマンドと手順
- Bashの脆弱性もう一件CVE-2014-7169に対するパッチ適用
- Bash脆弱性に対してChefでbashをアップデートしてパッチ適用
Leave Your Message!