Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Proxy nginx条件代理传递_Proxy_Nginx - Fatal编程技术网

Proxy nginx条件代理传递

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

我正在尝试将nginx配置为代理将请求传递给另一台服务器, 仅当$request_body变量与特定正则表达式匹配时

我现在的问题是,我不知道如何准确地配置这种行为

我现在只谈这一点:

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变量,因此它从未通过检查…它不再工作。答案中唯一仍然正确的是,原始版本中缺少的中断。-我“不接受”这个答案。