问题描述
我正在尝试在 PM2 和反向代理的帮助下使用 Nginx 在 EC2 实例中运行两个 express.js API。请在下面找到 Nginx 配置,
NGINX config for the locations
我的意图是在以下路线下运行这 2 个 API:
-
/
反向代理localhost:3000
-
/local
反向代理localhost:3001
为了让事情更清楚,我需要包含 /local
或 /local/
的 URL 来代理在端口 3001
上运行的 API。但是,当我尝试点击 https://example.com/local
或 https://example.com/local/
时,响应是从在端口 3000 中运行的 API 而不是预期的代理收到的。
这是在浏览器中尝试时返回的响应:
所需的解决方案是成功配置 2 个 API 以分别使用来自 /
又名根域和 /local
域的请求。但是这两个请求都转到第一个。
附注。我还被告知了一个技巧 - 尝试在配置文件中切换位置位置(即首先保持 /local
位置块,然后是 /
块),但仍然没有运气 - 相同的行为。
解决方法
反向代理可以很好地将请求重定向到正确的服务器,但运行在“/local”上的请求会转发包含“/local”的请求。所以那里的快递应用程序在路由中寻找 /local ,但我发现它没有配置。所以有这样的事情。
app.get('/local',(req,res) => {
res.send('Hello World2!')
})
只需确保为来自nginx的'/local'的express应用服务器中的所有路由添加前缀'/local'
和
“PS。我还被告知了一个技巧 - 尝试在配置文件中切换位置位置(即首先保持 /local 位置块,然后是 / 块),仍然没有运气 - 相同的行为。”
以上将是正确的配置,因为 nginx 将匹配并将请求重定向到第一个适用的块。因此,如果 '/' 保留在 '/local' 之前,则所有请求都将被重定向到第一个 express 应用。