【问题标题】:nginx proxy requests for a specific path特定路径的 nginx 代理请求
【发布时间】:2015-03-19 05:30:00
【问题描述】:

是否可以将特定路径的请求传递到不同的上游服务器?

这是我的 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;
    }
 }

目前,对该站点的请求被重定向到在端口 8070 上运行的 Node.js 实例。

我希望将路径以 /services 开头的对该站点的请求重定向到在端口 8080 上运行的另一个 Node.js 实例。

这可能吗?当然——怎么会?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    是的,只需添加另一个 location 块:

    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;
        }
     }
    

    注意:我将所有共享代理指令提取到 server 块中,这样它们就不会在每个 location 块中重复。如果它们在不同位置之间存在差异,则必须将它们再次移动到 location 块中...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2019-03-14
    • 2013-06-29
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多