nginx限制ip访问
nginx限制ip,目前从网上发现了两种解决方法
1)是采用原生的方式来实现
set $flag f;
if ($remote_addr = 10.1.20.35 ) {
set $flag 1;
rewrite ^ /999.html break;
}
if ($flag = 1){
rewrite ^ /999.html break;
}
2)是采用geo模块来实现,默认1.16.1是自带的有这个模块
http中增加如下
geo $bad_user {
default 1;
172.30.0.60 1;
172.30.0.178 1;
10.1.1.70 0;
10.0.0.0/8 0;
172.30.1.0/24 0;
}
location中增加如下配置:
if ($bad_user = 1){
return 500;
}
另外调试中发现有个问题
如果是location /{
} 这种写 rewrite ^ /999.html break; 会自动找html目录下的999.html文件
但是如果是
location /cas {
}这种写 rewrite ^ /999.html break; 会自动找cas 项目下的999.html文件,这个自然就找不到了
所以就想了另一个解决办法,自定义500 return 500;
error_page 500 /999.html;
location =999.html{
root 999.html;
}
总结:1,采用自定义的500错误解决html找不到的情况
2,nginx-1.16.1 reload的情况下,某些配置是没有生效的,只能-s stop 然后-c nginx.conf才能生效,这个可能是版本之间的差别,间接也导致nginx调试了好久没有生效的原因
3,算是一个笨方法,本来想一个location中限制所有的ip locaion只能这么写:location ~* / 但是逻辑上有问题,想访问的url,比如 /cas 也都先匹配这个了,就比较矛盾
解决办法就是,所有的location中 都加入 如下的配置,虽然加的地方有些多,但还是解决了问题,后续想想还有没有更好的解决办法
if ($bad_user = 1){
return 500;
}
本文来自博客园,作者:春江潮水连海平,转载请注明原文链接:https://www.cnblogs.com/alonewaiting/p/13651878.html