我正在尝试设置一个新的节点,以及我以前的PHP应用程序。
www.xyz.com
运行。 它使用nginx来提供。 我想在链接www.xyz.com/nodeApp
上服务NodeJs应用程序
我的方法是将所有在www.xyz/nodeApp
上www.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
等链接中提供css
和js
文件。
点击www.xyz.com/nodeApp
,它不起作用。 节点服务器提取请求并正确提供html
页面,但是css
和js
文件在链接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。