设置 Node App 和 nginx 服务器

设置 Node App 和 nginx 服务器

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

设想

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

我想在链接处为 NodeJs 应用程序提供服务 www.xyz.com/nodeApp

我尝试过

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

我在 nginx 文件中添加了以下代理配置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;
}

结果

点击 后www.xyz.com/nodeApp/,一切正常。Node 服务器接收请求并在链接等处提供css和文件。jswww.xyz.com/nodeApp/app.js

但(没有尾部斜杠)

点击 时www.xyz.com/nodeApp,它不起作用。Node 服务器接收请求并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);
});

答案1

您应该简化配置:

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

如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由proxy_pass、 [...] 之一处理,则执行特殊处理。响应 URI 等于此字符串的请求,但没有尾部斜杠,将返回带有斜线的请求 URI 的永久重定向(代码为 301)。

此外,中不需要变量。Nginx 将自动用proxy_pass替换前缀并附加查询字符串。/nodeApp//

相关内容