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/ { отрицать все; } }
Указанные выше тайм-ауты были добавлены мной, чтобы попытаться решить эту проблему, но не дали желаемого эффекта.