Nginx v Redis: преждевременно закрытое соединение - PullRequest
0 голосов
/ 14 января 2019

Мой экземпляр AWS EC2, работающий на Node, должен передать данные в мой кэш Redis. Это работало хорошо в течение нескольких месяцев. Но за прошедшие несколько дней он сломался.

Все запросы либо истекают через 60 секунд, либо я получаю ошибку 502.

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

Я перезагружал узел redis несколько раз, но это не сработало. Я перестраивал стек Cloudformation несколько раз, но это не сработало. я прекратил и создал новые экземпляры EC2 - тот же эффект.

Я проверил следующее:

  • Группы безопасности проверены: все хорошо
  • Проверены разрешения IAM: все хорошо
  • Роли IAM проверены: все хорошо
  • URL-адрес конечной точки Redis: правильный
  • Ключ доступа / секрет проверен: все хорошо

Я просмотрел логи nginx и обнаружил следующую информацию:

2019/01/11 09:24:33 [ошибка] 3826 # 0: * 6732 восходящее преждевременно закрытое соединение при чтении заголовка ответа из восходящего потока, client:, server: my.server.url, запрос: «GET / путь / из / запрос HTTP / 1.1», восходящий поток: «http://ip.ad.dr.ess:PORT/path/of/request”, хост:« my.server.url »

У меня есть два конфига nginx. Родитель выглядит так:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" - $request_time X-Forwarded-For=$http_x_forwarded_for Host=$host';

    log_format KVP 'ip="$remote_addr" time="$time_local" request="$request" '
                    'status_code=$status request_time=$request_time '
                    'host="$http_host" '
                    'body_bytes_sent=$body_bytes_sent referrer="$http_referer" user_agent="$http_user_agent" remote_user="$remote_user"';

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

    #sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  300s;

    #gzip  on;

    # Load modular configuration files from the /etc/path/to/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/path/to/*.conf;

    index   index.html index.htm;

}

И следующий включен:

proxy_read_timeout 300s;

limit_req_zone $binary_remote_addr  zone=api:10m rate=10r/s;


# A virtual host using mix of IP-, name-, and port-based configuration
#

upstream NAME_REMOVED {
    server xxx.x.x.x:<%= @server_port %>;
}

server {
    listen       80;

    server_name <%= @server_url %>;

    real_ip_header X-Forwarded-For;
    # internal addresses in TEST
    set_real_ip_from xx.xxx.0.0/16;
    # internal addresses in PRODUCTION
    set_real_ip_from xx.xxx.0.0/16;

    gzip on;
    gzip_comp_level 6;
    gzip_vary on;
    gzip_min_length  1000;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    gzip_buffers 16 8k;
    client_max_body_size 100M;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_connect_timeout 300s;

        proxy_pass http://app;
        proxy_redirect off;

        limit_req zone=api burst=10;
    }

    location ~ /.git/ {
        deny all;
    }
}

Указанные выше тайм-ауты были добавлены мной, чтобы попытаться исправить эту проблему, но не дали желаемого эффекта.

Я также пытался это и , что , но ни один из них не решил проблему

...