【发布时间】:2015-12-08 00:01:01
【问题描述】:
我是一名前端开发人员,上次尝试了 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 个不同的服务器。即如果城市是Bangalore,我需要重定向到bangalore.corp.net:3000,如果城市是NewYork,那么我需要重定向到newyork.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 配置文件中处理这样的代理传递。请告诉我。
【问题讨论】:
-
如果您正在寻找基于参数值的条件重写,您也许可以调整这个答案:serverfault.com/questions/488444/…
-
是代理通行证还是重定向。我想要代理通行证而不是重定向
-
rewrite可以做任何一个,见可选的[flag]参数:nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite -
您声明需要根据参数进行重定向。你能用一个具体的例子来更新你的问题吗?我不清楚参数是否是 URI 的查询元素的一部分,如果是,为什么不能使用路径元素。显然使用路径元素(
nginx调用位置)将是最有效的。 -
@RichardSmith 根据我分享的上述配置,我需要为特定请求代理传递到 4 个不同的应用服务器。说
/hosts我想调用4 个应用服务器中的任何一个proxy-pass http://app1-host.net:3000; http://app2-host.net:3000; http://app3-host.net:3000; http://app4-host.net:3000;这应该基于我将传递的参数。说/app1/hosts那么它应该代理传递给app1-host.net:3000;ope 我很清楚。还通过添加更多细节来编辑问题。希望这会有所帮助。
标签: nginx reverse-proxy proxypass