Help us understand the problem. What is going on with this article?

Railsを本番稼働させるときはnginxとsession storeの設定に注意

More than 5 years have passed since last update.

これ、今後リリースするアプリは毎回注意しなきゃなと思いました。

背景

本番稼働させたアプリが予期せぬ502や、Railsのエラーが出るようになってしまいました。
何かと思って調べたら以下の2つのエラーが出ていました。

nginx

upstream sent too big header while reading response header from upstream

rails

ActionDispatch::Cookies::CookieOverflow

それぞれ上限値を越えてしまったために、出たエラーです。

回避する設定は以下。

※追記(2014/04/15 21:00)
そもそもnginxでheaderがデカイって怒られている原因はcookieに一杯値が入っていただけで、その原因はsessionに値をたくさん突っ込むようなことをしていたからなので、そもそもその時点で問題があります。

今回は一度nginxのエラーを解消しなければcookieの問題も気が付かなかったのですが、session storeをcookie以外にした時点でnginxのproxy bufferの設定は不要かなと思いました。

ということで、nginxの設定については蛇足ですね。

nginxのproxy bufferの設定

参考

参考URLの用にnginx.confhttp{}の中に以下の設定を追加するだけで直りました。
デフォルトのproxy bufferのサイズを超えていたようです。

nginx.conf
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

暫定ですが、上記の値にしました。

session storeをcookieからactiverecordに変更

必ずしもactiverecordでなくてもいいです。memcachedやredisでもいいと思います。とにかくcookie以外で。

参考

Rails4からはgemを入れないとだめだそうです。

Gemfile
+gem 'activerecord-session_store'

session storeを変更します。

config/initializers/session_store.rb
-YourAppName::Application.config.session_store :cookie_store, key: '_your_app_name_session'
+YourAppName::Application.config.session_store :active_record_store, key: '_your_app_name_session'
$ bundle install
$ rails g active_record:session_migration
$ rake db:migrate
※本番リリース時はRAILS_ENV=productionをつける

あとは再起動して終了です。

懸念としては、

  • 現在ログインしているユーザーはログアウトしてしまう
  • sessionに一時的に値を保存するような処理中だとエラーが発生する(何かの登録処理など)

大規模になってしまってからはやりづらいので最初から行っておきたいですね。

kazuph
はて風呂にはポエム、QiitaにはTipsを書くようにしています。起業してIoTプロダクト開発全般に従事し、同社CTOを経由して現在はTech Leadとなり現場でバリバリ開発してます→転職しました。AWS、Rails、iOS、Android、組み込みらへんが守備範囲です。最近はVim派をやめてVScodeでNode書いてます。
http://kazuph.hateblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした