是否可以将对特定路径的请求传递到不同的上游服务器?
这是我的 nginx 站点配置:
upstream example.org {
server 127.0.0.1:8070;
keepalive 8;
}
server {
listen 0.0.0.0:80;
server_name example.org www.example.org;
access_log /var/log/nginx/example.org.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://example.org;
proxy_redirect off;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,对此站点的请求被重定向到在端口 8070 上运行的 Node.js 实例。
我希望将此站点的请求(具有以/services开头的路径)重定向到在端口 8080 上运行的另一个 Node.js 实例。
这可能吗?当然还有——怎么会这样呢?
是的,只需添加另一个位置块:
upstream example.org {
server 127.0.0.1:8070;
keepalive 8;
}
upstream other.example.org {
server 127.0.0.1:8080;
keepalive 8;
}
server {
listen 0.0.0.0:80;
server_name example.org www.example.org;
access_log /var/log/nginx/example.org.log;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
location / {
proxy_pass http://example.org;
}
location /services {
proxy_pass http://other.example.org;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我将所有共享代理指令提取到服务器块中,以便它们不会在每个位置块中重复。如果它们在不同位置之间有所不同,您将不得不将它们再次移动到位置块中......