#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 работают с моего локального хоста на моем компьютере, но не на сервере.