nginx中的代理传递配置
我是一名前端开发人员,上一次尝试了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
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/;
}