如何绕过nginx代理的IPS列表

How to bypass nginx proxy a list of IPS

我有一个 Nginx 配置,重定向到保留页面:

    location / {
        ...
        if ($setholdingpage = 'True') {
        rewrite (^.*$) /holding-page last;
        }
           proxy_pass $backend;
    }

另外,我有一个 IP 列表,应该列入白名单,而不是重定向到保留页面。怎么可能?

您可以使用 allow deny 指令。

如果我让你更正,白名单将成为你的 $setholdingpage 某种变量?

试试这个

server {

error_page 403=@holding;

location / {
  allow 127.0.0.1;
  allow 192.168.1.0/24;
  deny all;

  proxy_pass http://backend;

}

location /@holding {
  root /path/to/your/holding/html;
  index holdingv1.html;
}

}

这会将非白名单 IP 发送到您指定的错误页面。 error_page 也可以在 location 中。

未测试,但这应该可以解决问题。

参考资料: http://nginx.org/en/docs/http/ngx_http_access_module.html#allow

您可以使用 Nginx geo module 创建一个基于客户端 IP 地址的变量,您可以指定单独的 IP 地址或 CIDR 范围:

geo $bypassip {
  default 0;

  64.233.160.0/19 1;
  66.102.0.0/20 1;
}

如果 IP 与您的列表中的 IP 匹配,则覆盖您的变量:

if ($bypassip = 1){
  set $setholdingpage False;
}

我使用类似的设置来阻止某些地理区域,但仍然允许 Google 抓取工具访问我的网站。