Проверка работоспособности контейнера Nginx для AWS-ALB

Мне нужно иметь путь проверки работоспособности для настройки ALB, который указывает на сервер, на котором есть докер-контейнер Nginx. У меня нет доступа внутри сервера EC2, чтобы добавить туда файл. Я могу просто добавить что-нибудь в Docker-Container

Я попробовал следующее решение, однако оно не работает для меня, потому что у меня есть другой блок в моем файле конфигурации, который, как мне кажется, мешает.

Решение Nginx для AWS Amazon ELB Health Checks - возврат 200 без IF

Мой конфигурационный файл выглядит следующим образом:

server 
{    
   listen      443 ssl http2;
   server_name     server-test.com;
   access_log  /var/log/nginx/nginx.access.log;
   error_log   /var/log/nginx/nginx.error.log;
   ssl    on;
   ssl_certificate    /etc/nginx/ssl/cert.pem;
   ssl_certificate_key    /etc/nginx/ssl/server.key;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
   ssl_session_timeout 1d;
   ssl_session_cache builtin:1000 shared:SSL:10m;
   ssl_session_tickets off;

   location /
   {
      proxy_pass         http://server-test.io:5015/;
      proxy_redirect     off;

      ##proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

      client_max_body_size       10m;
      client_body_buffer_size    128k;

      proxy_connect_timeout      90;
      proxy_send_timeout         90;
      proxy_read_timeout         90;

      proxy_buffer_size          4k;
      proxy_buffers              4 32k;
      proxy_busy_buffers_size    64k;
      proxy_temp_file_write_size 64k;
   }
 }
...
...
...

# Health check url
server {
  location /elb-status {
    access_log off;
    return 200 'A-OK!';
    add_header Content-Type text/plain;
  }
}
# Redirect non-existing domains to 404
server {
  server_name _;
  listen 80 default_server;
  return 404;
}
server {
  server_name _;
  listen 443 ssl;
  ssl_certificate    /etc/nginx/ssl/cert.pem;
  ssl_certificate_key    /etc/nginx/ssl/server.key;
  return 404;
}

Когда я открываю сервер с path /elb-status, он выдает мне 404 Not Found. А также статус сервера под LoadBalancer не здоров. Я думаю, что это из-за блока: "Перенаправить несуществующие домены", но мне также нужен этот блок.

Любая помощь будет оценена.

Отредактировано на основе ответа Энди:

Контейнер Nginx использует оба порта: 80 и 443. Я настроил целевую группу для серверов, в которую входит докер-контейнер Nginx, на основе этих портов, но проверка работоспособности серверов все еще не работает.

Есть ли что-то, что я здесь скучаю?

1 ответ

Как насчет запуска server блок, содержащий location /elb-status на другой порт?

При создании ALB, есть Advanced health check settings падать. В этих настройках вы можете переопределить порт проверки работоспособности. Вы можете установить порт на что-то вроде 8080 а потом твой server будет выглядеть так:

server {
  listen 8080;
  location /elb-status {
    access_log off;
    return 200 'A-OK!';
    add_header Content-Type text/plain;
  }
}

В этой настройке нет необходимости в маршрутизации на основе виртуального хоста для проверки работоспособности. порт 8080 будет посвящен только проверке здоровья.

Не забудьте открыть соответствующий порт в вашей группе безопасности между экземплярами ALB и EC2, если вы решите пойти по этому пути.

Другие вопросы по тегам