Proxy nginx条件代理传递
我正在尝试将nginx配置为代理将请求传递给另一台服务器, 仅当$request_body变量与特定正则表达式匹配时 我现在的问题是,我不知道如何准确地配置这种行为 我现在只谈这一点:Proxy nginx条件代理传递,proxy,nginx,Proxy,Nginx,我正在尝试将nginx配置为代理将请求传递给另一台服务器, 仅当$request_body变量与特定正则表达式匹配时 我现在的问题是,我不知道如何准确地配置这种行为 我现在只谈这一点: server { listen 80 default; server_name test.local; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_head
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
}
root /srv/http;
}
}
但这里的问题是,根总是占上风。
代理将不会以任何方式通过
你知道我怎样才能做到这一点吗
提前感谢试试这个:
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
break;
}
root /srv/http;
}
}
Nginx路由基于与请求URI匹配的location指令。解决方案是临时修改它,以便将请求转发到不同的端点
server {
listen 80 default;
server_name test.local;
if ($request_body ~* ^(.*)\.test) {
rewrite ^(.*)$ /istest/$1;
}
location / {
root /srv/http;
}
location /istest/ {
rewrite ^/istest/(.*)$ $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://www.google.de;
}
}
if
条件只能在它所属的Nginx中安全使用。在这个例子中。rewrite
在请求URI前面加上istest
位置
块优先于最接近的匹配。任何匹配的/istest/
都将转到第二个块,该块使用另一个重写
在转发到上游代理之前从请求URI中删除/istest/
。是否确实要对照regexp检查$Request\u body
?它也会使你的应用程序慢x倍,你想做proxy\u pass
还是只做redirect
?是的,我没有其他选择,不幸的是,我真的需要代理pass,应用程序无法重定向(xml rpc客户端),但现在有什么问题?这不管用吗?日志中有什么?是的,它不工作,当我删除根行时,代理工作,当我添加根行时,就好像根本没有配置代理。所以我需要设法使if按照我的预期工作…thx伙计,你为我节省了很多时间和头痛,我很高兴解决方案这么简单:非常感谢@夏普那这种方法还能用吗?在我的测试中,它似乎不存在。@user973254您确实测试过这个吗?看起来nginx此时没有读取request_body变量,因此它从未通过检查…它不再工作。答案中唯一仍然正确的是,原始版本中缺少的中断。-我“不接受”这个答案。