ホームページ  >  記事  >  運用・保守  >  Nginx を使用して HTTP リクエストの再試行とフェイルオーバーを行う方法

Nginx を使用して HTTP リクエストの再試行とフェイルオーバーを行う方法

王林
王林オリジナル
2023-08-02 09:45:302748ブラウズ

Nginx を使用して HTTP リクエストの再試行とフェイルオーバーを行う方法

現代のインターネット アプリケーションでは、予期せぬネットワークの問題やバックエンド サービスの障害が原因で HTTP リクエストの失敗が頻繁に発生します。アプリケーションの可用性と安定性を向上させるには、再試行メカニズムとフェイルオーバーが不可欠です。この記事では、Nginx を使用して HTTP リクエストのリトライとフェイルオーバーを実装する方法を紹介します。

  1. 再試行メカニズム

HTTP リクエストが失敗した場合、再試行メカニズムはリクエストが成功するか最大再試行回数に達するまでリクエストの送信を再試行します。 Nginx では、ngx_http_proxy_module モジュールを使用して HTTP リクエストの再試行を実装できます。

まず、Nginx 構成ファイルに location ブロックを追加して、再試行するターゲット アドレスを定義する必要があります。以下は設定例です。

http {
    # 其他配置项

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_next_upstream error timeout;
            proxy_connect_timeout 1s;
            proxy_intercept_errors on;
            error_page 500 502 503 504 = @retry;
        }

        location @retry {
            internal;
            proxy_pass http://backend;
            proxy_next_upstream error timeout;
        }

        upstream backend {
            server backend1.example.com;
            server backend2.example.com;
            server backend3.example.com;
        }
    }
}

上記の設定では、複数のバックエンド サーバー アドレスを含む backend という名前の upstream モジュールを定義します。このアドレスに HTTP リクエストを送信するときにエラーまたはタイムアウトが発生すると、Nginx は自動的に他のサーバーを再試行します。

構成アイテムproxy_next_upstreamは、エラーまたはタイムアウトが発生したときに次のバックエンドサーバーに切り替えるNginxの動作を定義するために使用されます。 error は 5xx レベルのエラーが発生した場合の切り替えを意味し、timeout はタイムアウト エラーが発生した場合の切り替えを意味します。 proxy_connect_timeout バックエンド サーバーへの接続のタイムアウトを設定するために使用されます。

  1. フェイルオーバー

バックエンド サーバーに障害が発生した場合、リクエストを他の利用可能なサーバーに転送する必要があります。 Nginx は、フェイルオーバーを実装するための ip_hash モジュールと upstream モジュールを提供します。

まず、バックエンド サーバーのアドレスとその他のオプションを指定するために、Nginx 構成ファイルで upstream ブロックを定義する必要があります。以下は設定例です。

http {
    # 其他配置项

    upstream backend {
        ip_hash;
        server backend1.example.com weight=1;
        server backend2.example.com weight=2;
        server backend3.example.com down;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

上記の設定では、ip_hash オプションを使用して、クライアント IP アドレスに基づいてリクエストをバックエンド サーバーに転送します。このようにして、同じクライアントからのリクエストは同じバックエンド サーバーに送信され、セッションの一貫性が維持されます。 weight オプションを使用すると、負荷分散のために異なるバックエンド サーバーに異なる重みを割り当てることができます。

バックエンド サーバーに障害が発生した場合、down オプションを使用して、そのサーバーを利用不可としてマークできます。このとき、Nginx はリクエストを他の利用可能なサーバーに自動的に転送します。

概要:

上記の構成では、Nginx を使用して HTTP リクエストの再試行とフェイルオーバーを実装できます。再試行メカニズムにより、リクエストが失敗した場合に自動的に複数回試行できるため、アプリケーションの可用性が向上します。フェイルオーバー メカニズムは、バックエンド サーバーに障害が発生した場合に、リクエストを他の利用可能なサーバーに自動的に転送し、アプリケーションの安定性を確保します。

もちろん、上記は基本的な使用方法の紹介にすぎず、実際のアプリケーションでは、特定のニーズに基づいてさらに構成や調整が必要になる場合があります。この記事が、Nginx を使用して HTTP リクエストを再試行およびフェイルオーバーする方法を理解するのに役立つことを願っています。

以上がNginx を使用して HTTP リクエストの再試行とフェイルオーバーを行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。