ответы nginx 504/502 ошибка тайм-аута шлюза время от времени

#node.js #nginx #server #nginx-reverse-proxy

#node.js #nginx #сервер #nginx-обратный прокси

Вопрос:

Я столкнулся с проблемой.

У меня есть 6 экспресс-приложений, запущенных на узле, и я использую Nginx в качестве обратного прокси, и все они работают без проблем в течение нескольких месяцев. Но недавно, когда я пытаюсь перейти на внутреннюю страницу любого сайта, он вернул мне ошибку 502 или 504 nginx.

Когда я пытаюсь запускать приложения на ngrok или локально, они работают корректно, но на рабочем сервере я получаю ошибку 504/502.

В журнале Nginx указано 2019/04/10 16:38:12 [error] 1362#1362: *245 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.9.113.120, server: my.server, request: "GET /videos/videoId HTTP/1.1", upstream: "http://127.0.0.1:3000/videos/videoId", host: "www.my.host"

Я пытался увеличить время ожидания

 proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;
  

Но это не помогло (

Вот моя конфигурация сервера.

 server {
    listen x.x.x.x:443 http2;
    ssl on;

    server_name www.myservername.com;

...(ssl conf here)

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  

Я изучаю похожие темы StackOverflow, но не нашел решения. Самое странное в этом случае то, что через некоторое время внутренняя страница доступна, но после того, как я выполняю загрузочные тесты и отправляю около 100 запросов на рабочий сервер, она перестает работать примерно на полчаса или час

Заранее спасибо за помощь.

Ответ №1:

Вы прослушиваете 443, используя ssl, вы должны указать свои сертификаты / ключ :

 server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /var/lib/nginx/ssl/serverssl.crt;
    ssl_certificate_key /var/lib/nginx/ssl/serverssl.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header Host example.com;
        proxy_pass http://localhost:8192/;
    }
 }
  

Комментарии:

1. Когда вы сворачиваете свое приложение непосредственно с сервера, есть ли у вас какой-либо ответ? curl -X ПОЛУЧАЕТ » localhost:3002 »

2. к сожалению, curl или wget также не отвечали ((((

3. Ваше приложение запущено на порту 3000 или 3002 (журнал nginx показывает 3000, nginx conf показывает 3002)? Перезапустите приложение, затем попробуйте выполнить curl / wget вашего приложения (не nginx!) напрямую с помощью 127.0.0.1 и localhost: 127.0.0.1:3000/videos/ VideoID , localhost:3000/videos/ VideoID

4. Если вы не можете получить доступ к своему приложению через прямой ip / lcoalhost, проблема на стороне приложения, а не на nginx

5. в конфигурации произошла ошибка опечатки. установлен порт 3000. просто пытался сделать curl, но в любом случае возникла та же проблема. wget или curl работают с моего локального хоста на моем компьютере, но не на сервере.