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が特定のクッキーを使用して持続的なリクエストルーティングを行うように設定します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ