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

Постоянные сообщения 502 от AWS ALB

Это наша архитектура: Cloudflare -> ALB 1 -> Nginx API Gateway -> ALB 2 -> (Nginx Sidecar -> Приложение)

Приложение и сопроводительный файл находятся в одной коробке и взаимодействуют через сокет домена unix.

Мы видим устойчивый, но небольшой поток HTTP 502 от ALB 2. Насколько мы можем судить, эти запросы не доходят до приложения. Проанализировав данные захвата пакетов, наша команда пришла к выводу, что дополнительный компонент возвращает ответ сброса соединения на ALB 2, в результате чего от ALB поступают сообщения 502.

Мы убедились, что keepalive_timeout в нашем сопроводительном файле nginx conf больше, чем время простоя ALB (90 с).

Правило прослушивания ALB 2 - прослушивать HTTPS 443 и пересылать целевой группе.

Соответствующая конфигурация из Nginx API Gateway:

sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  server_tokens off;
  more_clear_headers Server;

  underscores_in_headers on;
  proxy_buffer_size 128k;
  proxy_buffers 4 256k;
  proxy_busy_buffers_size 256k;
  large_client_header_buffers 4 512k;
  client_max_body_size 50M;

  keepalive_timeout 120s;
  client_header_timeout 120s;

Соответствующий конфиг из коляски:

 sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  server_tokens off;

  underscores_in_headers      on;
  proxy_buffer_size           128k;
  proxy_buffers               4 256k;
  proxy_busy_buffers_size     256k;
  large_client_header_buffers 4 512k;
  client_max_body_size        50M;

  keepalive_timeout 650s;
  client_header_timeout 650s;
  keepalive_requests 10000;
  lingering_timeout 650s;

  upstream app {
    server unix:/var/tmp/puma.sock fail_timeout=0;
  }

  server {
    listen 8000;

    location / {
      proxy_pass http://app;
      proxy_buffering off;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Request-Start "t=${msec}";
      proxy_set_header Host $http_host;
    }
  }

Это приложение Rails, работающее на Puma. Соответствующая конфигурация Puma:

bind("unix:///var/tmp/puma.sock?backlog=3")

Мы довольно озадачены источником 502-х годов. ; (