2026年7月13日
2026年7月13日
NginxでCookieを使ったセッション持続性(Sticky Session)を設定する方法
はじめに
セッションはWebアプリケーションで一時的なユーザー情報を保持するために使用される重要な機能です。通常、セッションデータはクライアントとサーバー間の通信において必要不可欠な情報であり、持続性を確保することでユーザーデータが常に利用可能になります。Nginxは多くのWebアプリケーションで用いられる軽量かつ高パフォーマンスのウェブサーバーですが、デフォルトではセッションデータは一時的なものとしてしか扱われません。そこで、クッキーを使用してNginxが同一のユーザーリクエストを特定のバックエンドサーバーに常に送ること(持続性)を持つように設定する方法について解説します。
症状・背景
- ロードバランサで使用されるNginxが、特定のユーザーからのリクエストを同一のバックエンドサーバーへと常に転送できない場合
- 複数のバックエンドサーバー間でのセッションデータの一貫性が求められる場面
- クライアントのブラウザで生成されたセッションIDを利用して、ユーザーのリクエストを特定のサーバーにルーティングする必要がある場合
手順・設定方法
ステップ1: クッキーを使用した持続性設定
# Nginxのコンフィグレーションファイルを開く
sudo nano /etc/nginx/nginx.conf
# locationブロックにsticky指令を追加する
location / {
# セッションIDをクッキーに保存する
proxy_set_header Cookie $cookie_JSESSIONID;
# 有効なセッションIDが存在しない場合、新しいバックエンドサーバーを選択する
proxy_set_header Host $host;
proxy_pass http://backend;
# スティックセッションを有効にする
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# リクエストからクッキーを取得し、それを次のリクエストに含める
sub_filter_types *;
sub_filter 'Set-Cookie: JSESSIONID=' '$http_cookie/JSESSIONID=';
}
ステップ2: クッキーの有効期限とセッション管理
# Nginxのコンフィグレーションファイルを開く
sudo nano /etc/nginx/nginx.conf
# セッションクッキーの有効期限を設定する
proxy_set_header Cookie $cookie_JSESSIONID;
# クッキーが無効になった場合、新しいセッションを作成する
set $jsessionid "";
if ($http_cookie ~* "JSESSIONID=([^;]+)") {
set $jsessionid "$1";
}
# セッションクッキーをリクエストヘッダに追加する
proxy_set_header Cookie $cookie_JSESSIONID;
ステップ3: ロードバランサの設定
# Nginxのコンフィグレーションファイルを開く
sudo nano /etc/nginx/nginx.conf
# ロードバランサのために特定のクッキーを追加する
upstream backend {
server 192.168.1.10;
server 192.168.1.11;
# スティックセッションを有効にする
sticky cookie JSESSIONID;
}
ステップ4: Nginxの再起動
# Nginxを再起動して変更を反映する
sudo systemctl restart nginx
注意事項
- 有効なセッションIDがない場合、Nginxはユーザーのリクエストを任意のバックエンドサーバーに転送します。
- セッションIDが無効になった場合、新しいセッションを作成するために新たなバックエンドサーバーを選択する必要があります。
- 複数のバックエンドサーバー間でセッションデータの一貫性を保つために、各サーバーは同じセッション管理メカニズムを使用する必要があります。
まとめ
1. クッキーを使用した持続性設定: Nginxが同一のユーザーからのリクエストを特定のバックエンドサーバーに常に送るための基本的なステップ。
2. セッションクッキーの有効期限と管理: クッキーの有効期限を適切に設定することで、セッションの一貫性とパフォーマンスを保証します。
3. ロードバランサの設定: Nginxが特定のクッキーを使用して持続的なリクエストルーティングを行うように設定します。
関連記事: