nginx代理请求特定路径

时间:2015-03-18 21:17:57

标签: nginx

是否可以将特定路径的请求传递给其他上游服务器?

这是我的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实例。

这可能吗?当然 - 怎么样?

1 个答案:

答案 0 :(得分:0)

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

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

注意:我将所有共享代理指令解压缩到服务器块中,以便不会在每个位置块中重复这些指令。如果它们在不同位置之间有所不同,则必须将它们再次移动到位置块...