如何在重定向其他流量的同時回應特定 url 的 http 健康檢查?

如何在重定向其他流量的同時回應特定 url 的 http 健康檢查?

背景:我正在嘗試在Google雲端平台中設定實例組。這個實例組由許多 nginx 實例組成,其工作只是將傳入的 https 流量重新導向到外部網站。如果傳入的流量是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(如以下螢幕截圖所示),

在此輸入影像描述

我得到的是 301。在我看來,該網址_check已被重定向規則覆蓋。

我的問題:如何修改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] 

在標誌連接埠上,您可以設定任何您選擇的內容。然後你必須配置你的應用程式來回應它。

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

這將避免健康檢查請求與其餘流量一起重新導向。

相關內容