Mover a terminação SSL para a borda aumentou a instância de erros 502

2

Estamos usando o nginx como um balanceador de carga / failover para um par de servidores upstream. Nós começamos 11/1.

Este gráfico mostra a imagem. Onde não há ponto, não havia 502s naquele dia:

Nosprimeirosdias,osregistrosmostramumpequenonúmerode502códigosderesposta,provavelmentedevidoaajustesououtrasatividades,conformeestabilizamosnossaconfiguraçãonginx.Entãonóscorremospor12diassem502(excetoumblip11/13-novamentetalvezumajuste).

Em11/20,movemosaterminaçãoSSLdosservidoresupstreamparaaborda.Apartirdeentão,vemos502sdiariamenteeonúmeropareceestarcrescendo(comoumaporcentagemdetodasassolicitações)

Ontem,pelaprimeiravezdesde11/1,começamosareceberreclamaçõesdeclientes.

Apesardeumaporcentagembaixa(nuncachegandoa1%)detodootráfego(~½milhãodesolicitaçõespordia),elesgeralmenteseagrupameduram~10a15segundos.Duranteesseperíodo,muitosusuáriosexperimentamumafuncionalidadedegradadaouperdadeacesso.

nginx.conf

worker_processesauto;events{worker_connections1024;useepoll;multi_accepton;}http{includemime.types;default_typeapplication/octet-stream;sendfileon;keepalive_timeout70;keepalive_requests100000;tcp_nopushon;tcp_nodelayon;open_file_cachemax=1000inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses5;open_file_cache_errorsoff;gzipon;gzip_min_length1000;gzip_typesapplication/x-javascripttext/cssapplication/javascripttext/javascripttext/plaintext/xmlapplication/jsonapplication/vnd.ms-fontobjectapplication/x-font-opentypeapplication/x-font-truetypeapplication/x-font-ttfapplication/xmlfont/eotfont/opentypefont/otfimage/svg+xmlimage/vnd.microsoft.icon;gzip_disable"MSIE [1-6]\.";

  log_format main '$time_iso8601\t$status\t$remote_addr\t$upstream_addr\t$upstream_status\t$scheme\t$request\t$request_time\t$upstream_response_time\t$body_bytes_sent';
  access_log   /var/log/nginx/access.log  main;
  error_log   /var/log/nginx/error.log  error;
  # error_log   /var/log/nginx/error_debug.log

  upstream example {
    server 192.168.1.40:80;
    server 192.168.1.41:80;
  }

  server {
    listen              80;
    listen              443 default ssl;
    server_name         example.com;

#    ssl on;
    ssl_certificate         ssl/example.com.crt;
    ssl_certificate_key     ssl/example.com.key;
    ssl_trusted_certificate ssl/example.com.pem;

    location / {
      proxy_read_timeout      180;
      proxy_pass              http://example;
      proxy_next_upstream     error timeout invalid_header http_500 http_502 http_503 http_504;

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

Quando um 502 é acessado, o log de acesso fornece estes valores:

$status: 502
$upstream_addr: 192.168.1.40, example
$upstream_status: 500, 502

ou

$status: 502
$upstream_addr: example
$upstream_status: 502

ou variações como essas.

O log de erros diz:

[error] 21293#21293: *2441745 no live upstreams while connecting to upstream

Detalhes da instalação:

  • servidor Ubuntu 16.04.3 LTS
  • versão nginx: nginx / 1.12.2
  • 2 núcleos de CPU @ 3.00GHz
  • 8 GB de RAM
  • 2x10 Gbe NIC
  • HDD de 500 GB

Minhas perguntas:

  • Como a mudança do certificado para a borda aumentou as instâncias de erros 502 e como podemos corrigi-lo?
  • Por que a taxa está aumentando? A carga real é razoavelmente plana. Isso é um vazamento de algum tipo?

EDITAR PARA ADICIONAR:

  • adicionando o keepalive (obrigado @Owen Garret) não eliminou os 502s. Vamos verificar hoje à noite se talvez reduziu, então podemos ajustar o valor keepalive em conformidade
  • Enquanto isso, voltamos a encerrar o SSL no servidor da Web (passagem). Até agora, eliminou os 502s.
por biscuit314 29.11.2017 / 05:13

1 resposta

3

O NGINX está gerando o erro 502 porque ele não pode fazer uma conexão http quando necessário para as upstreams (sua configuração ' proxy_pass http://example; ').

O primeiro lugar para verificar seria seus servidores upstream. Verifique os logs de erro do servidor e o syslog para procurar indicações sobre por que eles podem estar falhando.

O problema tornou-se maior quando você alterou o proxy da conexão SSL usando o balanceamento de carga TCP (stream), para encerrar o SSL e fazer conexões http para o upstream? Em caso afirmativo, um dos efeitos dessa alteração é que os upstreams podem lidar com conexões TCP mais frequentes:

  • Ao fazer proxy na conexão SSL usando o balanceamento de carga TCP (fluxo), todas as solicitações na conexão são enviadas ao upstream na mesma conexão com proxy.
  • Ao finalizar a conexão e, em seguida, fazer novas solicitações ao upstream, o NGINX criará, por padrão, uma nova conexão TCP para cada solicitação.

Você pode incentivar o NGINX a manter as conexões TCP abertas e reutilizá-las para futuras solicitações, configurando o NGINX para usar as conexões keepalive com os upstreams, conforme descrito. Essa alteração pode reduzir o número de erros 502.

Adicione o seguinte ao seu bloco de localização, junto com a diretiva proxy_pass :

    proxy_http_version 1.1;
    proxy_set_header Connection "";

Adicione o seguinte à sua configuração de grupo upstream:

    keepalive 20;

Veja aqui para mais detalhes: link

    
por 29.11.2017 / 13:04

Tags