我有多个节点实例在不同的端口上运行。 (8000,8001等)我也在端口80上运行nginx。我想做的是允许用户通过单个域名进入我的网站,然后通过不同的URL可以访问不同的节点服务器
目前一切工作如下
http://example.com:8000/index.html(这是运行站点的一个节点服务器) http://example.com:8001/index.hmtl(这是另一个运行不同站点的节点服务器)
我希望能够做的是允许用户键入url路径并自动将它们定向到正确的站点,而无需指定端口。例如:
http://example.com/site1/inedx.html(这是在端口8000运行站点的一个节点服务器) http://example.com/site2/index.html(这是另一个在端口8001运行不同站点的节点服务器)
我一直在尝试使用nginx proxy_pass规则来实现这一点,但我无法让它工作。基本上nginx重新路由到正确的快速服务器,但是然后我在快递应用程序中的所有路由都会中断,因为它缺少端口。
所以,当我转到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/*;
}
}
app.js
app.get('/', function(req, res){
res.redirect('/index.html');
});
答案 0 :(得分:0)
在我对 nginx 和 proxy_pass 的不可否认的经验中,我发现当您使用
http://11.11.11.11/site1/
http://11.11.11.11/site1/index.html
但以下请求将失败:
http://11.11.11.11/site1
http://example.com/site1
http://example.com/site1/
http://example.com/site1/index.html
因为它们与位置块路径完全匹配。此外,除非另有说明,否则该路径下的任何子目录都将由nginx提供服务。例如:
http://11.11.11.11/site1/ <-- Succeeds
http://11.11.11.11/site1/js <-- Fails
你必须明确使用nginx。您需要在服务器上指定应用程序所在的 root 路径,使用类似regex的位置路径规范,并使用重写,以便nginx知道在代理路径之后不要处理任何事情:
server {
listen 443 ssl;
server_name myserver;
root /var/html/node; # The parent directory of where your apps live
location ^~ /app1/ {
rewrite ^/app1(.*) /real/app1/path$1;
proxy_pass https://127.0.0.1:8000;
proxy_redirect https://myserver/app1 /real/app1/path;
}
location ^~ /app2/ {
rewrite ^/app2(.*) /real/app2/path$1;
proxy_pass https://127.0.0.1:8001;
proxy_redirect https://myserver/app2 /real/app2/path;
}
}
/ real / app [x] / path 应该是 / var / html / node 下的真实目录,并且应该可以由运行nginx的用户访问。您的配置可能需要一些调整才能工作,但这应该可以帮助您完成任务。