Come configurare nginx in modo che funzioni con Express?


12

Sto provando a configurare nginx in modo che proxy_passrichieda alle mie app nodo. La domanda su StackOverflow ha ottenuto molti voti: /programming/5009324/node-js-nginx-and-now e sto usando la configurazione da lì.

(ma poiché la domanda riguarda la configurazione del server dovrebbe essere su ServerFault)

Ecco la configurazione di 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;
  }
}

Utilizzando il nodo semplice:

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

Funziona! Controllare: http://services.stefanow.net/test-http

Utilizzando express:

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

Non funziona :( Vedi: http://services.stefanow.net/test-express


So che sta succedendo qualcosa.

a) test-express NON è in esecuzione inserisci qui la descrizione dell'immagine

b) text-express è in esecuzione

inserisci qui la descrizione dell'immagine

(e posso confermare che è in esecuzione tramite riga di comando mentre ssh sul server)

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

Ho provato a impostare le intestazioni come descritto qui: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (continua a non funzionare)

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;

Ho anche provato a sostituire "127.0.0.1" con "localhost" e viceversa


Si prega di avvisare. Sono abbastanza sicuro che mi manchi qualche dettaglio ovvio e vorrei saperne di più. Grazie.


Qualche log in log degli nginxerrori?
Masegaloeh,

In questa configurazione: come si esegue l'applicazione express? Hai bisogno di un processo separato come forevero pm2che lo esegue, quindi nginxsolo i proxy ad esso?
grammatica

Non ricordo esattamente ... Ricordo che la risposta accettata ha funzionato per me.
Mars Robertson,

Risposte:


21

Esprimi configurato per servire il percorso /index.html, ma è necessario /test-express/index.html. Configurare express per servire /test-express/index.htmlo fare nginx per /test-exressrimuovere dalla richiesta proxy. Ultimi è semplice come aggiungere barre finali a locatione proxy_pass.

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

Vedi http://nginx.org/r/proxy_pass per i dettagli.


2
Q: "Sono abbastanza sicuro che mi manca qualche dettaglio ovvio" A: "semplice come aggiungere barre finali" (grazie, ero letteralmente bloccato)
Mars Robertson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.