Nginx 禁止IP访问
我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。下面我们就先看看Nginx的默认虚拟主机在用户通过IP访问,或者通过未设置的域名访问(比如有人把他自己的域名指向了你的ip)的时候生效最关键的一点是,在server的设置里面添加这一行:
listen 80 default;
后面的default参数表示这个是默认虚拟主机。
Nginx 禁止IP访问这个设置非常有用。
比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
server {
listen 80 default;
return 500;
}
B. 如何设置Nginx,使得其可以拒绝某些IP连接
nginx拒绝或允许指定IP,是使用模块HTTP访问控制模块(HTTP Access).
控制规则按照声明的顺序进行检查,首条匹配IP的访问规则将被启用。
location / {
deny 192.168.1.11;
allow 192.168.1.22/224;
allow 10.1.1.12/126;
deny all;
}
deny表示拒绝,allow表示允许。
上面的例子中仅允许192.168.1.22/224和10.1.1.12/126网络段访问这个location字段,但192.168.1.11是个例外。
C. 网站nginx配置限制单个IP访问频率,预防DDOS恶意攻击
对于网站来说,尤其是流量较大出名的网站,经常遇到攻击,如DDOS攻击等,虽然有些第三方,如Cloudflare可以挡,但对于动态网站PHP来说,只能挡一部分。这时候需要对于单个IP恶意攻击做出限流。nginx的两个模块可以限流。
nginx两个限流模块:
连接频率限制,ngx_http_limit_conn_mole:官方文档:https://nginx.org/en/docs/http/ngx_http_limit_conn_mole.html
请求频率限制,ngx_http_limit_req_mole:官方文档:https://nginx.org/en/docs/http/ngx_http_limit_req_mole.html
网上理论很多,根据名字可知:
当然还是看不懂的话,通俗点讲(相对于时间比较):
比如秒杀,抢购,连接频率限制和请求频率限制应该配合使用 , 使用连接频率限制同一IP同时只能有3个连接, 再使用请求频率限制对于同一ip的请求,限制平均速率为5个请求/秒 , 这样比单独只使用一种限制要好很多。
比如只使用请求频率限制 , 可以精确地限制同一ip1秒只能发起5次的http请求 , 假如同一ip1秒内发起了100000次请求 , 虽然限制了只有5次成功响应 , 但是其他的99995次的请求TCP握手建立http连接是不是会消耗服务器资源? 所以还需要配合使用。
1、limit_req_zone,示例:
2、limit_conn_zone,示例:
3、搭配一起使用
1、ab命令
ab是apache自带的压力测试工具。一般不用额外安装,ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
测试命令
2、wrk命令
需自己安装,地址:https://github.com/wg/wrk
安装
测试命令:
还有其他压测工具,自行研究
D. nginx怎么设置指定目录ip访问限制
nginx中针对目录进行IP限制 ,这里以phpmyadmin目录只能让内网IP访问,而外网不能访问的配置方法。
nginxphpmyadmin针对内网ip用户开放、外网ip用户关闭(在前面的配置中,location ~ ^/目录/使用正则, 优先级高于location /的配置,所以nginx无法对首页进行解析)
代码如下:
server{
listen80;
server_nameexample.com;
access_loglogs/access.logmain;
location/{
roothtml;
indexindex.phpindex.htmlindex.htm;
}
location~^/phpmyadmin/{
allow192.168.1.0/24;
denyall;
location~.*.(php|php5)?${
root/var/mailapp/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefastcgi_params;
}
}
location~.*.(php|php5)?${
root/opt/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefastcgi_params;
}
}
E. nginx 禁止ip访问
因为这里面只有一个server域,并且又设置了default标识,因此,此处可能是可以用ip进行访问的。
如果想屏蔽掉ip访问,只允许域名访问的话,可以增加如下配置。
server {
#....
if ( $host ~* "d+.d+.d+.d+" ) {
return 400;
}
location / {
#....
}
}
这样,当用ip访问时,$host的值就为ip地址,如果$host否和ip的正则,就直接返回400给客户端。
你不防线这样试试。
F. nginx如何禁止代理IP访问
nginx有禁止ip访问的功能,比如你想禁止的代理ip是2.2.2.2,那么配置可以写:
location / {
deny 2.2.2.2;
}当然nginx非常的灵活,他也可以禁止某个url,或者是正则匹配的规则。黑白名单都可以做,功能很强大。我只给你举了一个简单的例子。