web-dev-qa-db-ja.com

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

背景:Googleクラウドプラットフォームでインスタンスグループを設定しようとしています。インスタンスグループは、着信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;
    }

HttpプロトコルでヘルスチェックのURLを「/ _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を使用する場合(次のスクリーンショットのように)、

enter image description here

代わりに301を取得します。私にはURL _checkは再描画ルールによって上書きされます。

私の質問:要件を満たすようにnginxを変更するにはどうすればよいですか?

3
Anthony Kong

documentation に示されているように、定義した任意のポートで動作するようにヘルスチェックを設定できます。ヘルスチェックを作成するときに、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];

これにより、ヘルスチェックリクエストが残りのトラフィックとともにリダイレクトされるのを防ぐことができます。

1
Watacroft