Jak skonfigurować nginx, aby działał z Express?

12

Próbuję skonfigurować nginx, aby żądał proxy_passaplikacji do mojego węzła. Pytanie na StackOverflow otrzymało wiele pozytywnych opinii: /programming/5009324/node-js-nginx-and-now i stamtąd używam config.

(ale ponieważ pytanie dotyczy konfiguracji serwera, powinno to być na ServerFault)

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

Za pomocą zwykłego węzła:

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/');

To działa! Sprawdź: http://services.stefanow.net/test-http

Korzystanie z ekspresu:

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/');

To nie działa :( Patrz: http://services.stefanow.net/test-express


Wiem, że coś się dzieje.

a) test-express NIE działa wprowadź opis zdjęcia tutaj

b) tekst-ekspres jest uruchomiony

wprowadź opis zdjęcia tutaj

(i mogę potwierdzić, że działa za pośrednictwem wiersza poleceń, gdy ssh na serwerze)

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

Próbowałem ustawić nagłówki zgodnie z opisem tutaj: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (nadal nie działa)

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;

Próbowałem także zamienić „127.0.0.1” na „localhost” i odwrotnie


Proszę doradź. Jestem pewien, że brakuje mi oczywistych szczegółów i chciałbym dowiedzieć się więcej. Dziękuję Ci.

Mars Robertson
źródło
Każdy dziennik nginxbłędów dziennika?
masegaloeh
W tej konfiguracji - jak uruchamiasz aplikację ekspresową? Czy trzeba mieć oddzielny proces podobny foreverlub pm2która prowadzi to, to nginxtylko proxy do niego?
gramatyka
Nie pamiętam dokładnie ... Pamiętam, że zaakceptowana odpowiedź zadziałała dla mnie.
Mars Robertson,

Odpowiedzi:

22

Wyrażasz ekspres skonfigurowany do obsługi ścieżki /index.html, ale potrzebujesz /test-express/index.html. Skonfiguruj ekspres do obsługi /test-express/index.htmllub /test-exresszmuś nginx do usunięcia żądania z serwera proxy. Późniejsze jest tak proste, jak dodawanie końcowych ukośników do locationi proxy_pass.

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

Szczegółowe informacje można znaleźć na stronie http://nginx.org/r/proxy_pass .

Alexey Ten
źródło
2
Q: „Jestem pewien, że brakuje jakiegoś oczywistego szczegół” A: „tak proste jak dodawanie końcowe ukośniki” (dziękuję, byłem dosłownie zatrzymany)
Mars Robertson