他のトラフィックをリダイレクトしながら、特定の URL での http ヘルス チェックに応答するにはどうすればよいですか?

他のトラフィックをリダイレクトしながら、特定の URL での http ヘルス チェックに応答するにはどうすればよいですか?

背景: Google Cloud Platform でインスタンス グループを設定しようとしています。インスタンス グループは、着信 https トラフィックを外部サイトにリダイレクトするだけの nginx インスタンスで構成されています。着信トラフィックが http の場合は、https に変換されます。

インスタンス グループが機能するには、ヘルスチェック要求 (http または https プロトコルのいずれか) に応答し、200 を返す必要があります。

私が抱えている問題は、そのような nginx 構成をどのように定義するかということです。

これは私の最初のカットです。リダイレクトのみを処理します

    server {
        listen 80;
        listen 443 ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/examples.pem;
        ssl_certificate_key /etc/nginx/ssl/examples.key;
        server_name incoming.examples.com;
        return 301 https://target.examples.com$request_uri;
    }

ヘルスチェック URL を http プロトコルで '/_check' に設定しました。これが最初の試みです:

    server {
        listen 80;

        location /_check {
            return 200 'no content';
        }

        listen 443 ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/examples.pem;
        ssl_certificate_key /etc/nginx/ssl/examples.key;
        server_name incoming.examples.com;
        return 301 https://target.examples.com$request_uri;
    }

nginx サーバーは 404 で応答します。

次に、location 別の定義に移ろうとしましたserver

    server {
        location /_check {
            return 200 'no content';
        }
        listen 80;
    }

    server {
        listen 80;
        listen 443 ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/examples.pem;
        ssl_certificate_key /etc/nginx/ssl/examples.key;
        server_name incoming.examples.com;
        return 301 https://target.examples.com$request_uri;
    }

同じ結果になります。これはアクセス ログに表示される内容です。

130.211.3.85 - - [18/Jan/2017:08:41:25 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:29 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:30 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:34 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.85 - - [18/Jan/2017:08:41:35 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.3.81 - - [18/Jan/2017:08:41:39 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0"
130.211.1.249 - - [18/Jan/2017:08:41:40 +0000] "GET /_check HTTP/1.1" 404 168 "-" "GoogleHC/1.0

変更を最初の試みに戻して、ヘルスチェックを使用するように変更するとhttps(次のスクリーンショットのように)、

ここに画像の説明を入力してください

_check代わりに 301 が返されます。URLがリダイレクト ルールによって上書きされているようです。

質問: 要件を満たすために nginx をどのように変更すればよいでしょうか?

答え1

ヘルスチェックは、定義した任意のポートで動作するように設定できます。ドキュメンテーションヘルスチェックを作成するときは、UI またはコマンド ラインを使用できます。

$ gcloud compute health-checks create https NAME [--check-interval=CHECK_INTERVAL; default="5s"] [--healthy-threshold=HEALTHY_THRESHOLD; default=2] [--host=HOST] [--port=PORT; default=80] 

フラグ PORT では、任意のものを設定できます。その後、それに応答するようにアプリを構成する必要があります。

server {
        location /_check {
            return 200 'no content';
        }
        listen [PORT];

これにより、ヘルスチェック要求が残りのトラフィックとともにリダイレクトされることが回避されます。

関連情報