Как ответить на проверку работоспособности http по определенному URL-адресу при перенаправлении другого трафика?

Предпосылки: я пытаюсь настроить группу экземпляров на облачной платформе Google. Группа экземпляров состоит из нескольких экземпляров nginx, задача которых просто перенаправлять входящий трафик https на внешний сайт. Если входящий трафик - http, он будет преобразован в https.

Чтобы группа экземпляров работала, она должна ответить на запрос проверки работоспособности (в протоколе http или https) и вернуть 200.

Проблема I have - как определить такую ​​конфигурацию 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.

Затем я попытался переместить местоположение на другой сервер определение:

    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
задан 18 January 2017 в 10:54
1 ответ

Вы можете настроить проверку работоспособности для работы с любым портом, который вы определяете, как указано в документации . Вы можете использовать пользовательский интерфейс или командную строку при создании проверки работоспособности:

$ 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
ответ дан 3 December 2019 в 07:23

Теги

Похожие вопросы