Як налаштувати nginx, щоб він працював з Express?


12

Я намагаюся налаштувати nginx, щоб він proxy_passзапитував до моїх програм вузлів. Питання про StackOverflow отримало багато оновлень: /programming/5009324/node-js-nginx-and-now, і я використовую налаштування звідти.

(але оскільки питання стосується конфігурації сервера, це повинно бути на ServerFault)

Ось конфігурація nginx:

server {
  listen 80;
  listen [::]:80;

  root /var/www/services.stefanow.net/public_html;
  index index.html index.htm;
  server_name services.stefanow.net;

  location / {
    try_files $uri $uri/ =404;
  }

  location /test-express {
    proxy_pass    http://127.0.0.1:3002;
  }    

  location /test-http {
    proxy_pass    http://127.0.0.1:3003;
  }
}

Використання простого вузла:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3003, '127.0.0.1');

console.log('Server running at http://127.0.0.1:3003/');

Це працює! Перевірте: http://services.stefanow.net/test-http

Використання експрес:

var express = require('express');
var app = express(); //

app.get('/', function(req, res) {
  res.redirect('/index.html');
});

app.get('/index.html', function(req, res) {
  res.send("blah blah index.html");
});

app.listen(3002, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3002/');

Це не працює :( Дивіться: http://services.stefanow.net/test-express


Я знаю, що щось відбувається.

а) тест-експрес НЕ працює введіть тут опис зображення

б) текстовий експрес працює

введіть тут опис зображення

(і я можу підтвердити, що він працює за допомогою командного рядка, поки ssh на сервері)

root@stefanow:~# service nginx restart
 * Restarting nginx nginx                                                                                  [ OK ]

root@stefanow:~# curl localhost:3002
Moved Temporarily. Redirecting to /index.html

root@stefanow:~# curl localhost:3002/index.html
blah blah index.html

Я спробував встановити заголовки, як описано тут: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (досі не працює)

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;

Я також спробував замінити '127.0.0.1' на 'localhost' і навпаки


Порадьте, будь ласка. Я майже впевнений, що мені не вистачає явної деталі, і я хотів би дізнатися більше. Дякую.


Будь-який вхід у nginxжурнал помилок?
masegaloeh

У цьому налаштуванні - як ви запускаєте свою експрес-заявку? Ви повинні мати окремий процес , як foreverі pm2що запускає його, а потім nginxпросто проксі до нього?
граматика

Я не можу точно згадати ... Я пам'ятаю, що прийнята відповідь спрацювала для мене.
Марс Робертсон

Відповіді:


22

Ви виражаєте налаштований для обслуговування шлях /index.html, але вам потрібно /test-express/index.html. Або налаштувати express для обслуговування /test-express/index.htmlабо зробити nginx для /test-exressвідключення проксі-запиту. Пізніше настільки ж просто, як додати кінці в кінці locationта proxy_pass.

location /test-express/ {
  proxy_pass    http://127.0.0.1:3002/;
}

Докладні відомості див. У розділі http://nginx.org/r/proxy_pass .


2
Q: "Я майже впевнений, що я пропускаю якусь очевидну деталь" A: "так просто, як додати кінцеві косої риски" (дякую, я буквально застряг)
Mars Robertson
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.