SSL通信時にセッションを暗号化する方法

以前、「Let's Encryptを使用したWebサーバーのSSL化」という記事を書きました。
実はこの設定だけでは不十分だったので、今回はその続きを書きます。

セッションが保存されない

このポートフォリオサイトでは管理者のみがログインできる機能を持っています。
Railsチュートリアルを見ながら作った自前のログイン機能です。
このログイン機能ではログイン情報をセッションに保存しているのですが、WebサーバーのSSL化を行ってからセッションが保存されなくなりました。
ログイン状態のセッションが存在しないとログイン画面にリダイレクトする設定になっているので、何度ログインしようとしてもログイン画面に戻されるという状況になってしまいました。

Railsアプリの設定

config/environments/production.rbの設定を以下の通り変更します。
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
コメントアウトを外して強制SSL化設定を有効にします。
私は49〜50行目にありました。なければ普通に追加すればいいと思います。

Nginxの設定

/etc/nginx/conf.d/app.confを編集します。
  server {
    listen 80;
    ...
    location @app {
      # HTTP headers
      # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      # proxy_set_header Host $http_host;
      # proxy_redirect off;
      # proxy_pass http://app_server;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_redirect off;
      proxy_pass http://app_server;
    }
    ...
  }
  server {
    listen 443 ssl;
    location @app {
      # HTTP headers
      # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      # proxy_set_header Host $http_host;
      # proxy_redirect off;
      # proxy_pass http://app_server;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_redirect off;
      proxy_pass http://app_server;
    }
    ...
  }
http設定とhttps設定の両方に同じ設定を追加します。
私ははじめhttp設定の方にしか追加していなく、ERR_TOO_MANY_REDIRECTSというエラーが出て焦りました。
(ポートフォリオサイトがクラッキングされたのかと思った😊)

session_store.rbって?

前項までで設定は終わりなんですが、いろいろと検索していたときによく「session_store.rbをあーだこーだ」という記述が見られたので補足しておきます。
config/initializers/session_store.rbは、Rails5.1からデフォルトでは作成されなくなったセッション設定ファイルのようです。
これがなくてももちろん動きますし、設定自体は生きているらしいのでファイルを手動で追加すれば機能させることもできます。
今回の内容を満たすためには必要ありませんでした。

関連記事

【Rails】RSpecを使った自動テスト《システムスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 17:07
【Rails】RSpecを使った自動テスト《リクエストスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 16:06
【Rails】RSpecを使った自動テスト《コントローラースペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 15:39
【Rails】RSpecを使った自動テスト《モデルスペック編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月11日 11:50
【Rails】RSpecを使った自動テスト《基本編》
# はじめに Railsでアプリケーションを開発する際、品質を担保するためにテストは欠かせません。その中でも、RSpecは多くの開発者に愛用されているテストフレームワークです。 今回は、RSpecを使ったRailsアプリケーションのテスト方 [...]
2024年7月10日 17:49
【Rails】デザインパターン「Concern」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月10日 13:32
【Rails】デザインパターン「Form Object」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月6日 22:50
【Rails】デザインパターン「Service Object」の基本情報と実装方法
# はじめに Ruby on RailsなどのMVCフレームワークで構築したWebシステムにはアンチパターンというものが存在します。システム開発におけるアンチパターンとは、避けるべき悪い設計や実装方法のことを指します。 MVCフレームワーク [...]
2024年7月6日 19:59