Мой экземпляр 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. Родитель выглядит так:
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ 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 { listen 80; server_name ; 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; } }
Указанные выше тайм-ауты были добавлены мной, чтобы попытаться решить эту проблему, но не дали желаемого эффекта.