nginx中的代理传递配置

nginx中的代理传递配置,nginx,reverse-proxy,proxypass,Nginx,Reverse Proxy,Proxypass,我是一名前端开发人员,上一次尝试了nginx配置,效果很好。以下是配置: server { listen 80; server_name localhost; access_log /var/log/nginx/localhost.access.log; location / { #By default route to node.js running on localhost:9000 port

我是一名前端开发人员,上一次尝试了nginx配置,效果很好。以下是配置:

server {
    listen       80;
    server_name  localhost;
    access_log  /var/log/nginx/localhost.access.log;
    location / {
             #By default route to node.js running on localhost:9000 port
             proxy_pass http://localhost:9000;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection 'upgrade';
             proxy_set_header Host $host;
             proxy_cache_bypass $http_upgrade;
    }
    #currently only one server but will have to redirect to n hosts based on a parameter
    location /hosts.json {
      proxy_pass      http://app-host.net:3000;
    }
    #currently only one server but will have to redirect to n hosts based on a parameter
    location /hosts/ {
      proxy_pass      http://app-host.net:3000;
    }
}
现在,我需要根据一个参数重定向到4个不同的服务器。例如,如果城市是班加罗尔,我需要重定向到班加罗尔.corp.net:3000,如果城市是纽约,那么我需要重定向到纽约.corp.net:3000,依此类推

以下是我所期待的:

location /app1/hosts/ {
      proxy_pass      http://app1-host.net:3000;
    }
#But the proxy pass should point to http://app1-host.net:3000/hosts and not http://app1-host.net:3000/app1/hosts

如何在nginx配置文件中处理这样的代理传递。请告诉我。

您有一个/app1/hosts/foo格式的URL,应该映射到http://app1-host.net:3000/hosts/foo. 可以通过在proxy_pass指令中附加URI来实现,该指令的作用类似于别名


有关详细信息,请参阅。

如果您正在寻找基于参数值的条件重写,您可能可以调整以下答案:它是代理传递还是重定向。我想要代理传递,而不是重定向重写也可以,请参阅可选的[flag]参数:您声明需要基于参数重定向。你能用一个具体的例子更新你的问题吗。我不清楚参数是否是URI的查询元素的一部分,如果是,为什么不能使用path元素。显然,使用nginx调用位置的path元素将是最有效的。@RichardSmith根据我共享的上述配置,我需要为特定请求代理传递到4个不同的应用程序服务器。例如,对于/hosts,我想调用4个应用程序服务器中的任意一个代理通行证http://app1-host.net:3000; http://app2-host.net:3000; http://app3-host.net:3000; http://app4-host.net:3000; 这应该基于我将要传递的参数。说/app1/hosts,然后它应该代理传递给我,我很清楚。还通过添加更多详细信息编辑了问题。希望这有帮助。
location /app1/hosts/ {
  proxy_pass http://app1-host.net:3000/hosts/;
}