502 Bad Gateway при использовании ExpressJS с nginx

Если я запускаю свое приложение expressjs так: coffee server.coffee и перехожу к localhost:8080, все работает нормально.

Однако, когда я реверсирую прокси-сервер 8080 с nginx со следующей конфигурацией:

server {
    listen 0.0.0.0:80;
    server_name localhost;
    access_log /var/log/nginx/nodetest.log;

    location / {
      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_pass http://node/;
      proxy_redirect off;
    }
}

upstream node {
    server 127.0.0.1:8080;
}

Я получаю следующую ошибку в консоли Chrome Dev:

GET http://184.73.217.204/socket.io/xhr-polling//1300750540040 502 (Bad Gateway)

и следующее в error.log nginx

2011/03/22 13:07:59 [error] 10269#0: *18 upstream prematurely closed connection while
reading response header from upstream, client: 168.229.58.68, server: localhost, 
request:     "GET /socket.io/xhr-polling//1300799281533 HTTP/1.1", upstream:     
"http://127.0.0.1:8080/socket.io/xhr-polling/1300799281533", host: "184.73.217.204",    
referrer: "http://184.73.217.204/"

Любое руководство приветствуется!


person Mark    schedule 21.03.2011    source источник
comment
Что вы видите в ‹code›error_log‹/code›?   -  person CyberDem0n    schedule 22.03.2011
comment
22.03.2011, 13:07:59 [ошибка] 10269#0: *18 вышестоящее соединение преждевременно закрыто при чтении заголовка ответа от восходящего потока, клиент: 168.229.58.68, сервер: localhost, запрос: GET /socket.io/xhr- polling//1300799281533 HTTP/1.1, восходящий поток: 127.0.0.1:8080/socket. io/xhr-polling/1300799281533, хост: 184.73.217.204, реферер: 184.73.217.204   -  person Mark    schedule 22.03.2011


Ответы (2)


Попробуйте этот патч...

    -proxy_pass http://node/;
    +proxy_pass http://node;
person CyberDem0n    schedule 22.03.2011
comment
wiki.nginx.org/HttpProxyModule#proxy_pass -- вот документация Если необходимо передать URI в необработанном виде, тогда директива proxy_pass должна использоваться без части URI: location /some/path/ { proxy_pass _http://127.0.0.1; } - person CyberDem0n; 22.03.2011
comment
вау, часы отладки, и эта чертова косая черта отбросила все мое приложение. проголосовал! - person hellatan; 03.08.2011
comment
Гений!!!! Я просто хочу сказать спасибо, это заняло у меня часы, часы и часы отладки! - person Mohamed Mansour; 14.09.2011
comment
Я пробовал это, но это просто не работает. Какие-нибудь мудрые слова? stackoverflow.com/questions/9256454/ - person Gezim; 13.02.2012

Я новичок в настройке VMS, используя nginx и forever с nodejs/meanjs. Моя цель состояла в том, чтобы настроить прокси-сервер, чтобы он мог обслуживать мое приложение через порт 80 по умолчанию, а не через порт 3000.

Возясь с фрагментами блоков сервера nginx из множества различных онлайн-примеров, я начал сталкиваться с ошибкой 502 Bad Gateway. Путем множества проб и ошибок я, наконец, смог решить эту проблему.

В конце концов, казалось бы, эквивалентные способы использования forever для запуска node привели к совершенно разным результатам.

Что приводит к 502 Bad Gateway:

При запуске из корня сервера с использованием абсолютного пути к скрипту узла эта команда завершилась с ошибкой 502:

$ cd /
$ sudo forever start --spinSleepTime 10000 /var/www/mydomain.com/server.js

На самом деле, если на то пошло, если node вообще не работает, я также получаю ошибку 502.

Что работает:

Работали два способа: либо запустить forever из корневого каталога моего проекта без указания пути к скрипту узла (только имя файла), либо снова из корня сервера, но с использованием параметра sourceDir:

$ cd /var/www/mydomain.com
$ sudo forever start --spinSleepTime 10000 server.js

Or:

$ cd /
$ sudo forever start --spinSleepTime 10000 --sourceDir /var/www/shotplot.info/ server.js

Просто для полноты я также включу блок сервера nginx на случай, если это поможет предоставить дополнительный контекст:

upstream nodejs \{
        server 127.0.0.1:3000;
}
server {
        root /var/www/mydomain.com;
        server_name mydomain.com www.mydomain.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://nodejs;
                proxy_redirect off;
        }
}
person darrendb    schedule 18.11.2014