基于 remote_addr 的 Nginx 上游

基于 remote_addr 的 Nginx 上游

您是否知道是否有更简单的解决方案可以根据访问者的 IP 地址将请求传递到不同的上游?

目前我发现的唯一解决方案是:

upstream live {
    ip_hash;
    server 10.0.0.1;
}

upstream test {
    ip_hash;
    server 10.0.0.2;
}

location / {
    if ($remote_addr = "10.0.0.101") {
        proxy_pass http://test;
    }
    proxy_pass http://live;
    // the rest of the bla bla
}

如果您只有一个“location”和一个应该发送到“test”上游的 IP 地址,那么此方法可以解决问题。我在包含配置文件时尝试了 if 语句(不起作用)。我还尝试在声明上游时放置 if(同样,不起作用)。

因此,如果有人正在做类似的事情,我将不胜感激(我相信我不是唯一遇到这个问题的人)。我需要这个解决方案,以便我们的开发人员在真实环境中进行测试……这是因为我们使用的支付解决方案允许我们仅从当前基础设施发送请求。

谢谢。

答案1

尝试这个:

    geo $upstream_addr {
           10.0.0.101/32 test;
           default live;
    }

...
            location / {
                    proxy_pass http://$upstream_addr;
                    ...
            }

相关内容