背景
在管理后台修改一些内容的时候,想到很久之前安装的重定向插件Redirections
,随便就看一下。这不看不知道,看到了就差点大声尖叫。没有想到这么多对站点无意义的请求命中之前设置的重定向规则,一眼就可以发现请求UA
不正常。例如:Apache-HttpClient
、python-requests
等
这种是一些非法采集的应用,觉得还是要对这类UA
进行一些限制,例如:禁止指定UA访问、拒绝IP或者IP段的访问等。
现在服务已经由原来的Apache
迁移到了Nginx
服务上运行,所以现在的处置方案针对Nginx
的。
Nginx禁止特定UA访问
在Nginx
中有一个内置变量$http_user_agent
,表示HTTP
请求头中的User-Agent
字段。使用正则表达式匹配User-Agent
字段中是否包含特定的字符串,符合规则的则禁止访问。具体实现如下:
location / {
if ($http_user_agent ~* (python-requests|Apache-HttpClient)) {
return 403;
}
}
以上配置可以用于防止用户使用某些自动化工具或脚本对站点进行滥用。然而,需要注意的是,这种检测方式并不完全可靠。因为用户可以通过修改User-Agent
来绕过此防护措施。所以这种方式只可以被视作拦截大多数爬虫程序的一种简单手段。
Nginx禁止特定的IP以及IP段
如果说Nginx
禁止特定的UA
来访问是一个泛化的处理方式的话,那么禁止IP
或者IP
段这是一个具备针对点的解决方法。针对某个IP
或者某个IP
段,这种方式比较滞后,发现大量无用请求后才可以采取的措施。当然,面对这种恶意的请求,这些也只是最快速、最简单、最低廉的解决方案。
在Nginx
中,可以使用deny
指令来禁止IP
地址或IP
地址段的访问。这个功能可以用于防止恶意访问和DDoS
攻击,以及限制对特定内容的访问。
禁止单个IP地址
要禁止单个IP地址的访问,可以在 Nginx
配置文件中添加以下行:
location / {
deny 192.168.1.100;
# 其他配置
}
在此例中,使用 deny
指令来阻止IP
地址为 192.168.1.100
的客户端访问该位置的内容。如果有客户端尝试访问,他们将收到403 Forbidden
错误。
禁止IP地址段
如果要禁止IP
地址段的访问,可以在 Nginx
配置文件中使用 CIDR
表示法。CIDR
表示法允许您指定一个 IP
地址的范围。例如,要阻止 192.168.0.0/24
子网内的所有客户端访问,可以使用以下配置:
location / {
deny 192.168.0.0/24;
# 其他配置
}
这将阻止子网内的所有IP
地址从该位置访问,包括 192.168.0.1
、192.168.0.2
、192.168.0.3
等等。
恢复被禁止的客户端
如果想恢复先前被禁止的 IP
地址或 IP
地址段的客户端,请简单地将其从相关的配置中删除或注释掉。
location / {
# deny 192.168.1.100;
# deny 192.168.0.0/24;
# 其他配置
}
完整实例
下面是一个完整的Nginx
配置,它禁止IP地址为192.168.1.100
和192.168.0.0/24
的客户端访问站点:
http {
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
# 禁止IP地址为192.168.1.100的客户端访问
deny 192.168.1.100;
# 禁止IP地址为192.168.0.0/24的客户端访问
deny 192.168.0.0/24;
# 允许其他客户端访问
allow all;
# 其他配置
}
}
}
转载请注明:清风亦平凡 » Nginx禁止指定UA、IP或者IP段访问