¿Cómo configurar nginx para que funcione con Express?


12

Estoy tratando de configurar nginx para que proxy_passsolicite a mis aplicaciones de nodo. La pregunta sobre StackOverflow obtuvo muchos votos positivos: /programming/5009324/node-js-nginx-and-now y estoy usando config desde allí.

(pero como la pregunta es sobre la configuración del servidor, se supone que debe estar en ServerFault)

Aquí está la configuración de 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;
  }
}

Usando el nodo simple:

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

¡Funciona! Verificación: http://services.stefanow.net/test-http

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

No funciona :( Ver: http://services.stefanow.net/test-express


Sé que algo está pasando.

a) test-express NO se está ejecutando ingrese la descripción de la imagen aquí

b) se está ejecutando text-express

ingrese la descripción de la imagen aquí

(y puedo confirmar que se ejecuta a través de la línea de comandos mientras ssh en el servidor)

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

Intenté configurar encabezados como se describe aquí: http://www.nginxtips.com/how-to-setup-nginx-as-proxy-for-nodejs/ (todavía no funciona)

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;

También intenté reemplazar '127.0.0.1' con 'localhost' y viceversa


Por favor avise. Estoy bastante seguro de que extraño algunos detalles obvios y me gustaría aprender más. Gracias.


¿Algún log in nginxerror log?
— masegaloeh

En esta configuración, ¿cómo está ejecutando su aplicación express? ¿Necesitas tener un proceso separado como forevero pm2que lo ejecute, luego nginxsolo se delegue?
— gramática el

No puedo recordar exactamente ... Recuerdo que la respuesta aceptada funcionó para mí.
— Mars Robertson

Respuestas:


21

Expresa configurado para servir ruta /index.html, pero lo requiere /test-express/index.html. Configure express para servir /test-express/index.htmlo haga que nginx se /test-exresselimine de la solicitud proxy. Este último es tan simple como agregar barras diagonales finales a locationy proxy_pass.

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

Ver http://nginx.org/r/proxy_pass para más detalles.


2
P: "Estoy bastante seguro de que pierdo algunos detalles obvios" A: "tan simple como agregar barras diagonales" (gracias, estaba literalmente atascado)
— Mars Robertson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.