Я не могу заставить Passenger запустить мое приложение Nodejs (iojs) при перезапуске nginx. Я выполнил инструкции и установил необходимые компоненты:
$ nginx -V
версия nginx: nginx / 1.8.0
настроить аргументы: --with-cc-opt = '- g -O2 -fstack-protector --param = ssp-buffer-size = 4 -Wformat ……… --add-module = / tmp / buildd / nginx-1.8.0 / debian / modules / пассажир / ext / nginx
в http
блокировка включена:
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/bin/passenger_free_ruby;
passenger_nodejs /usr/local/bin/node;
passenger_default_user staging;
passenger_default_group www-data;
Затем в серверном блоке:
upstream instance {
# point to node instance
server 127.0.0.1:9000;
}
# for websockets
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 3000;
server_name localhost;
set $app_root /home/staging/public_html;
root $app_root/tmp;
passenger_enabled on;
# point to where the app.js file is
passenger_app_root $app_root;
passenger_sticky_sessions on;
location / {
proxy_pass http://instance;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Proto $scheme;
}
# all static non-scripts are here
location /public/ {
alias $app_root/app/assets/;
}
}
Затем перезапустив nginx, я пытаюсь загрузить страницу и в журналах ошибок вижу:
… Starting Passenger watchdog...
… Starting Passenger core...
… Passenger core running in multi-application mode.
… Passenger core online, PID 26585
… Starting Passenger UstRouter...
… Passenger UstRouter online, PID 26590
… [error] 26736#0: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 188.102.152.94, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:9000/", host: "staging.chatterplot.com:3000"
Переход по URL-адресу дает мне 502 плохой шлюз.
Я не видел подобных примеров блоков сервера nginx, поэтому у меня такое чувство, что я делаю что-то очень неправильно.
Оказывается, причина, по которой пассажир не трогается с места, заключалась в том, что, похоже, он требует location /
блокировать не для прокси-запроса, а для его обработки. Следующая конфигурация сделала свое дело.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 3000;
server_name localhost;
set $app_root /home/user/public_html/dist;
root $app_root/public;
passenger_enabled on;
passenger_sticky_sessions on;
passenger_app_type node;
passenger_app_root /home/user/public_html/dist;
passenger_app_env production;
}
Еще одна вещь, которая мне не была ясна с самого начала, - это то, что пассажир / nginx берет публичный каталог и делает все там доступным. без /public
в URL.
Так что любые запросы с /public/images/logo.png
просто /images/logo.png