Назад | Перейти на главную страницу

Проверка работоспособности контейнера 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, на основе этих портов, но проверка работоспособности серверов все же неработоспособна.

Что-то мне здесь не хватает?

Как насчет запуска 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, если вы решите пойти по этому пути.