2026年7月24日

2026年7月24日

Nginxでホットデプロイ(ゼロダウンタイム更新)する方法

はじめに

Nginxは高度なルーティングとキャッシュ機能を持つウェブサーバーであり、ホットデプロイ(ゼロダウンタイム更新)を実現するためのツールとしても利用されます。これにより、新しいコードやファイルをデプロイしても、ユーザーが一瞬もサイトを見ることなくサービスが停止したり遅延することなく、平滑に切り替わります。

この方法は、特に大規模なウェブサイトや重要なシステムにおいて頻繁な更新が必要となるWordPressサイトなどに適用されることが多く、信頼性と可用性を向上させる上で重要です。

手順・設定方法

ステップ1: Nginxのロードバランシング設定

まず、Nginxを使ってロードバランシングを行うための基本的な構成を設定します。この設定では、Nginxが2つのバックエンドサーバー(例:app1, app2)間でリクエストをルーティングし、どちらもウェイトに基づいて自動的に負荷分散を行います。

# Nginxの基本的なロードバランシング設定
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://app1:8080;
        # ロードバランシング用のクライアントIPをキャッシュする
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;

        # 10秒以内に接続が失敗した場合、次のバックエンドサーバーにリクエストを送信
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    }

    upstream app {
        server app1:8080 weight=5 max_fails=3 fail_timeout=30s;
        server app2:8080 weight=3 max_fails=3 fail_timeout=30s;
    }
}

ステップ2: Nginxのエイリアス設定

次に、新しいバージョンのウェブサイトをデプロイするために、Nginxが既存のバージョンと新しいバージョンを同時に提供できるようにします。これにより、新しいコードやファイルが正しく動作していることを確認できます。

# Nginxのエイリアス設定
server {
    listen 80;
    server_name example.com;

    location /current/ {
        proxy_pass http://app1:8080;
        # 同時に旧バージョンも提供するためのルーティング
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }

    location /new/ {
        proxy_pass http://app2:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }
}

ステップ3: Nginxのルーティング設定

新しいバージョンがテスト通过したら、Nginxを更新して新しいバージョンに切り替えます。これを行うために、Nginxのルーティング設定を変更します。

# 新しいバージョンへの切り替え
server {
    listen 80;
    server_name example.com;

    location / {
        # ルーティングを新しいバージョンに変更する
        proxy_pass http://app2:8080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
    }

    location /current/ {
        # 旧バージョンのルーティングを削除する
        return 410;
    }
}

ステップ4: Nginxの再読み込み

Nginxの設定が変更されたら、新しい設定を適用するためにNginxを再読み込みします。

# Nginxの設定を再読み込み
sudo nginx -s reload

注意事項

  • ロードバランシング用のバックエンドサーバーは、同じ環境下で動作するように構成し、互換性のあるウェブアプリケーションを使用すること。
  • 新しいバージョンのコードやファイルをデプロイする前に、必ずテストを行い、問題がないことを確認すること。
  • デプロイ後にユーザーに影響を与える可能性がある場合は、デプロイ時間を最小限に抑えたり、非ピーク時間帯に行うことが推奨される。

まとめ

1. ロードバランシング: Nginxを使って複数のバックエンドサーバーを用いてウェブアプリケーションを負荷分散し、信頼性と可用性を向上させる。

2. エイリアス設定: 新しいバージョンのウェブサイトを提供するために、Nginxが旧バージョンと新しいバージョンを同時に提供できるようにする。

3. ルーティング切り替え: テスト通過後にNginxのルーティングを更新し、新しいバージョンに完全に切り替える。

4. 再読み込み: Nginxの設定が変更されたら、新しい設定を適用するためにNginxを再読み込みする。

関連記事:

お気軽にご相談ください

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