我有多个节点实例,每个实例都在不同的端口上运行。(8000、8001 等)我还在端口 80 上运行 nginx。我想要做的是允许用户通过单个域名进入我的网站,然后通过不同的 url 访问不同的节点服务器。
目前一切工作如下
http://example.com:8000/index.html (This is one node server running a site)
http://example.com:8001/index.hmtl (this is another node server running a different site)
我希望能够让用户输入 URL 路径并自动将他们引导到正确的网站,而无需他们指定端口。例如:
http://example.com/site1/inedx.html (This is one node server running a site at port 8000)
http://example.com/site2/index.html (this is another node server running a different site at port 8001)
我一直试图使用 nginx proxy_pass 规则来实现这一点,但无法正常工作。本质上,nginx 重新路由到正确的 express 服务器,但 express 应用中的所有路由都中断了,因为它缺少端口。
所以当我去http://example.com/site1/index.html我需要http://example.com/index.html。任何帮助都将不胜感激。我已将 nginx.conf 的相关部分和示例快速路由粘贴到下面。
nginx.conf
server {
listen 80;
server_name 11.11.11.111;
root /home/ubuntu;
location /site1/ {
proxy_pass http://11.11.11.111:8000/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $proxy_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://11.11.11.111:8000/;
proxy_redirect http://11.11.11.111/* http://11.11.11.111:8000/*;
}
location /site2/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $proxy_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://11.11.11.111:8001/;
proxy_redirect http://11.11.11.111/* http://11.11.11.111:8001/*;
}
}
应用程序.js
app.get('/', function(req, res){
res.redirect('/index.html');
});
答案1
site/
当您通过 nginx 为和设置代理时site2/
,nginx 将透明地删除路径,除非您在指令中明确设置它proxy_pass
。
例如:
location /site1/ {
proxy_pass http://11.11.11.11:8000;
}
当您访问 时example.com/site1
,nginx 将根据上面指定的位置块捕获该请求,并将其传递给 express。Express 会将该请求视为/
。/site1
已被删除。
因此,如果您想维护/site1
,可以:
- 在您的配置中指定“相对路径”
/site1
,并将其贯穿到您的整个代码中。 - 或者,将 nginx 更改为
proxy_pass http://11.11.11.11:8000/site1