与nginx服务器一起设置Node应用程序

我正在尝试设置一个新的节点,以及我以前的PHP应用程序。

脚本

  • php应用程序在www.xyz.com运行。 它使用nginx来提供。
  • 节点应用程序通过端口8142上的NodeJs服务器提供服务。

我想在链接www.xyz.com/nodeApp上服务NodeJs应用程序

我试过了

我的方法是将所有在www.xyz/nodeAppwww.xyz/nodeApp的请求都代理到端口8142,节点服务器将在端口8142处接收请求。

我将以下代理conf添加到www.xyz.com的nginx文件。

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

结果

打到www.xyz.com/nodeApp/ ,一切正常。 节点服务器提取请求,并在www.xyz.com/nodeApp/app.js等链接中提供cssjs文件。

但是(没有后面的斜线)

点击www.xyz.com/nodeApp ,它不起作用。 节点服务器提取请求并正确提供html页面,但是cssjs文件在链接www.xyz.com/app.js等处提供。所以应用程序中断。

我错在哪里?

我的节点服务器文件

 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); }); 

你应该简化configuration:

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

在这种情况下,nginx将处理尾部的斜杠。 请参阅http://nginx.org/r/location

如果一个位置由一个以斜线字符结尾的前缀string定义,并且请求被proxy_pass ,[…]之一处理,那么执行特殊处理。 为了响应URI等于这个string的请求,但没有结尾的斜杠 ,带有代码301的永久redirect将被返回到所请求的URI,并附有斜线。

另外, proxy_pass不需要variables。 Nginx会自动replace前缀/nodeApp/ with /并附加查询string。