Wie reagiert man auf einen HTTP-Integritätscheck unter einer bestimmten URL, während anderer Datenverkehr umgeleitet wird?

Wie reagiert man auf einen HTTP-Integritätscheck unter einer bestimmten URL, während anderer Datenverkehr umgeleitet wird?

Hintergrund: Ich versuche, eine Instanzgruppe in der Google Cloud-Plattform einzurichten. Die Instanzgruppe besteht aus einer Reihe von Nginx-Instanzen, deren Aufgabe lediglich darin besteht, eingehenden HTTPS-Verkehr auf eine externe Site umzuleiten. Wenn der eingehende Verkehr HTTP ist, wird er in HTTPS konvertiert.

Damit die Instanzgruppe funktioniert, muss sie auf eine Integritätsprüfanforderung (entweder im http- oder im https-Protokoll) antworten und 200 zurückgeben.

Mein Problem besteht darin, eine solche Nginx-Konfiguration zu definieren.

Dies ist mein erster Schnitt. Er behandelt nur die Umleitung

    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;
    }

Ich habe die URL für den Integritätscheck auf „/_check“ mit HTTP-Protokoll gesetzt. Dies ist mein erster Versuch:

    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;
    }

Der Nginx-Server antwortet mit einer 404.

location Dann habe ich versucht, zu einer anderen Definition überzugehen 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;
    }

Es gibt mir das gleiche Ergebnis. Das ist, was ich im Zugriffsprotokoll sehe.

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

Wenn ich die Änderung auf meinen ersten Versuch zurücksetze und die zu verwendende Integritätsprüfung ändere https(wie im folgenden Screenshot),

Bildbeschreibung hier eingeben

Stattdessen bekomme ich 301. Mir scheint, die URL _checkwird von der Umleitungsregel überschrieben.

Meine Frage: Wie kann ich Nginx ändern, um die Anforderung zu erfüllen?

Antwort1

Sie können die Integritätsprüfung so einrichten, dass sie mit jedem Port funktioniert, den Sie definieren, wie in derDokumentationSie können beim Erstellen der Integritätsüberprüfung die Benutzeroberfläche oder die Befehlszeile verwenden:

$ 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] 

Unter der Flagge PORT können Sie einen beliebigen Wert festlegen. Anschließend müssen Sie Ihre App so konfigurieren, dass sie darauf reagiert.

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

Dadurch wird vermieden, dass die Integritätsprüfungsanforderungen mit dem restlichen Datenverkehr umgeleitet werden.

verwandte Informationen