如何绕过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 抓取工具访问我的网站。
我有一个 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 抓取工具访问我的网站。