nginx条件代理传递

sha*_*ner 20 proxy nginx

我试图配置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;
    }

}
Run Code Online (Sandbox Code Playgroud)

但这里的问题是,根始终是上手.代理不会以任何方式传递.

关于如何实现这一目标的任何想法?

提前致谢

use*_*254 16

试试这个:

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 它不起作用了.在答案中唯一仍然正确的是原始版本中缺少的中断. - 我"不接受"答案. (7认同)

Ste*_* E. 9

Nginx 路由基于与请求 URI 匹配的位置指令。解决方案是临时修改它,以便将请求转发到不同的端点。

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;

    }
}
Run Code Online (Sandbox Code Playgroud)

if条件只能安全地在 Nginx 中使用,它是其一部分的重写模块。在这个例子中。rewrite请求 URI的前缀为istest

location块要优先最接近的匹配。任何匹配的/istest/都将进入第二个块,在转发到上游代理之前,该块使用另一个块从请求 URI 中rewrite删除/istest/