Configurando o Node App junto com o servidor nginx

1

Estou tentando configurar um novo nó junto com meu aplicativo PHP anterior.

Cenário

  • O aplicativo php é executado em www.xyz.com . É servido usando nginx.
  • O aplicativo do nó é servido via servidor NodeJs na porta 8142.

Eu quero servidor do aplicativo NodeJs no link www.xyz.com/nodeApp

O que eu tentei

Minha abordagem era fazer proxy de toda a solicitação feita em www.xyz/nodeApp para a porta 8142, onde o servidor do nó pegaria.

Eu adicionei o seguinte proxy no arquivo nginx de www.xyz.com .

location ~ ^/nodeApp(.*)$ {
   proxy_http_version 1.1;
   proxy_pass_request_body on;
   proxy_set_header Host $host;
   proxy_set_header Scheme $scheme;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://127.0.0.1:8142$1$is_args$args;
   proxy_buffering off;
}

Resultado

Ao atingir o www.xyz.com/nodeApp/ , tudo funciona. O servidor de nós seleciona a solicitação e atende os arquivos css e js no link www.xyz.com/nodeApp/app.js etc.

Mas (sem a barra final)

Ao atingir o www.xyz.com/nodeApp , não funciona. O servidor de nós seleciona a solicitação e atende a página html corretamente, mas os arquivos css e js são exibidos no link www.xyz.com/app.js etc. Assim, o aplicativo é interrompido.

Onde estou errado?

Meu arquivo do servidor de nós

var express = require("express");
var app = express();

app.use(express.static(__dirname + '/build'));

var port = process.env.PORT || 8142;
app.listen(port, function() {
  console.log("Listening on " + port);
});
    
por Ateev Chopra 27.11.2015 / 08:45

1 resposta

3

Você deve simplificar a configuração:

location /nodeApp/ {
   proxy_http_version 1.1;
   proxy_set_header Host $host;
   proxy_set_header Scheme $scheme;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_pass http://127.0.0.1:8142/;
   proxy_buffering off;
}

Nesse caso, o nginx cuidará da barra final. Veja link

If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, [...], then the special processing is performed. In response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended.

Além disso, não há necessidade de variáveis em proxy_pass . O Nginx substituirá o prefixo /nodeApp/ por / e anexará as sequências de consulta automaticamente.

    
por 27.11.2015 / 09:00