Зависают запросы к Node через Nginx

Всем доброго времени суток.

Стало интересно поиграться с комбинацией Node.JS + Nginx. Написал тестовый сайт, поднял nginx, но счастье не пришло.
Nginx работает просто проксёй, но с css возникли проблемы(хотя иногда задержка и в загрузке самой страницы, а потом всё отлично отдаётся). Запрос тупо ждёт минуту. Если спросить сайт напрямую, то всё работает отлично. Только через nginx — проблемы.
Нода отдаёт css как статический контент.

image

Конфиг
#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

gzip on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable «MSIE [1-6]\.»;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

server {
listen 80;
server_name .test.com;

location / {
proxy_pass localhost:9999/;
proxy_redirect off;

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;
}



location *\.(js|css|png|jpg|jpeg|gif|ico|html)$ {
expires max;
}
}
}



Заранее всем спасибо.

Проблема была решена использованием nginx-1.2.3 вместо nginx-1.5.6
  • Вопрос задан
  • 4239 просмотров
Пригласить эксперта
Ответы на вопрос 6
taliban
@taliban
php программист
А не проще ли отдавать статику напрямую через нгинкс? Какой смысл ноду дергать из-за картинок и стилей?
Ответ написан
@rozhik
В связке Nginx + нода, при правильной настройке проблем нет. И со статикой и с динамикой.

Однако, если Вы опишите каким образом отдаётся статический контент через ноду, и кусок конфига nginx, то легче давать советы.
К примеру статику на ноде отдаёт десяток разным модулей, какой из них Вы используете не известно.

Судя по красивой минуте — отдача происходит по таймауту. Проблема может быть нодовском коде (что скорее всего), либо протокольной (к примеру после минуты ожидания закрытия потока — он закрывается автоматом).
Ответ написан
pomeo
@pomeo
А где вы взяли такой пример app.use(express.static(config.root + '/static')) везде обычно так app.use(express.static(path.join(__dirname, 'static')))
Покажите app.js, так будет быстрее.
Ответ написан
kleinmaximus
@kleinmaximus
Senior Full-stack Javascript Developer
У меня то же самое.
Когда обращаешься напрямую к node через localhost:3000 - страничка отдается моментально, а когда идет через nginx localhost зависает каждый второй запрос.
Ответ написан
Комментировать
@fAra0N25
Была такая же проблема на nginix 1.7.5 под виндой, в убунту на дефолном конфиге было все норм.
Решилось переносом урла в дерективу upstream
Конфиг
upstream psh_backend {
  server 127.0.0.1:4020;
  keepalive 64;
}

server {
  listen 4010;
  keepalive_timeout 10;
  / ****/
  location /api {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://psh_backend;
  }
}

Ответ написан
@eugene_pr
Решилось обновлением nginx до 1.8.0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы