如何在重定向其他流量的同时响应特定 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;
    }

我将健康检查 URL 设置为“/_check”,使用 http 协议。这是我的第一次尝试:

    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。在我看来,URL_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] 

在标志 PORT 上,您可以设置任何您选择的内容。然后您必须配置您的应用程序以响应它。

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

这将避免健康检查请求与其余流量一起重定向。

相关内容