Nginx v Redis: преждевременно закрытое соединение
Мой экземпляр 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 /path/of/ запрос HTTP/1.1 ", восходящий поток:" http://ip.ad.dr.ess:PORT/path/of/request ", хост:" my.server.url "
У меня есть два конфига nginx. Родитель выглядит так:
# Для получения дополнительной информации о конфигурации см.:
# * Официальная документация на английском языке: http://nginx.org/en/docs/
# * Официальная русская документация: http://nginx.org/ru/docs/
пользователь nginx;
рабочий_процесс 1;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log note;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
События {
рабочий_соединения 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 300 с;
#gzip on;
# Загрузите файлы модульной конфигурации из каталога /etc/path/to/conf.d.
# См. Http://nginx.org/en/docs/ngx_core_module.html#include
# для дополнительной информации.
include /etc/path/to/*.conf;
index index.html index.htm;
}
И следующий включен:
proxy_read_timeout 300s;
limit_req_zone $ binary_remote_addr zone = api: скорость 10 м = 10r / s;
# Виртуальный хост, использующий сочетание конфигурации на основе IP, имени и порта
#
вверх по течению NAME_REMOVED {
сервер xxx.xxx:;
}
сервер {
слушай 80;
название сервера;
real_ip_header X-Forwarded-For;
# внутренние адреса в TEST
set_real_ip_from xx.xxx.0.0/16;
# внутренние адреса в ПРОДУКЦИИ
set_real_ip_from xx.xxx.0.0 / 16;
GZIP на;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied любой;
gzip_types текст / простой текст / приложение css / приложение json / текст x-javascript / приложение xml / приложение xml /xml+rss текст / приложение javascript /javascript;
gzip_buffers 16 8k;
client_max_body_size 100M;
место нахождения / {
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 300 с;
proxy_connect_timeout 300s;
proxy_pass http: // app;
proxy_redirect off;
limit_req zone = api burst = 10;
}
местоположение ~ /.git/ {
отрицать все;
}
}
Указанные выше тайм-ауты были добавлены мной, чтобы попытаться решить эту проблему, но не дали желаемого эффекта.