NGINX: muitos erros de conexão expiraram

2

Estou recebendo muito este erro:

2014/11/26 21:01:30 [error] 3475 # 0: * 4028 upstream expirou (110: Tempo limite da conexão esgotado) durante a leitura do cabeçalho de resposta do upstream

Aqui está minha configuração:

user www-data;
pid /run/nginx.pid;
worker_processes 2;
worker_rlimit_nofile 16384;

events {
  worker_connections    4096;
  use                   epoll;
  multi_accept          on;
}

http {

  sendfile              on;
  tcp_nopush            on;
  tcp_nodelay           on;
  keepalive_timeout     65;

  # free up connection after client stops responding...
  reset_timedout_connection on;

  # If the client stops reading data, free up the stale client connection after this much time. Default 60.
  # send_timeout          2;


  types_hash_max_size   2048;

  server_names_hash_bucket_size 256;
  # server_name_in_redirect off;

  include               /etc/nginx/mime.types;
  default_type          application/octet-stream;

  ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;  # don’t use SSLv3 ref: POODLE
  ssl_ciphers           "AES256+EECDH:AES256+EDH";

  access_log            /var/log/nginx/access.log;
  error_log             /var/log/nginx/error.log;

  ##
  # Gzip Settings
  ##

  gzip                  on;
  gzip_vary             on;
  gzip_min_length       10240;
  gzip_proxied          expired no-cache no-store private auth;
  gzip_types            text/plain text/css text/xml text/javascript application/x-javascript application/xml;
  gzip_disable          "MSIE [1-6]\.";
  ##
  # general proxy settings
  ##
  proxy_cache_path      /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
  proxy_temp_path       /var/tmp;
  proxy_intercept_errors on;

  include               /etc/nginx/conf.d/*.conf;
  include               /etc/nginx/sites-enabled/*;
}
    
por AllTheTime 26.11.2014 / 22:36

1 resposta

3

Solução para o problema anterior : aumente proxy_read_timeout ou verifique por que o seu back-end não responde a tempo.

Sua segunda pergunta : existem duas coisas, o cabeçalho Upgrade e o cabeçalho Connection .

Ambos precisam ser passados para o backend ao usar websockets e você pode usar um mapa para alterar o valor, dependendo dos cabeçalhos de solicitação originais (ou seja, se for um hashaske de conexão de websocket ou tráfego HTTP padrão). O back-end deve responder ao cabeçalho Upgrade com HTTP 101 . Em seguida, o nginx entrará em um caso específico em que um túnel é configurado entre a origem da solicitação e o backend.

Tal caso é explicado na documentação oficial :

http {

    map $http_upgrade $connection_upgrade {
        default     upgrade;
        ''          close;
    }

}

server {

   ...

   location /foo/ {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }

}
    
por 27.11.2014 / 22:12

Tags