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.


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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.