在Nginx服务器配置中,allow
和deny
指令是控制客户端访问权限的核心工具,常用于限制特定IP、IP段或域名的访问。通过灵活组合这两个指令,可以实现白名单、黑名单、防爬虫、安全防护等功能。本文ZHANID工具网将详细解析其语法、配置示例及实际应用场景。
一、基本概念与语法
allow
和deny
指令属于Nginx的HttpAccessModule
模块,通常嵌套在location
、server
或http
块中,按配置顺序依次匹配,直到找到第一条符合规则的指令。
语法格式:
allow [IP | 网段 | 域名 | all]; deny [IP | 网段 | 域名 | all];
IP:支持IPv4(如
192.168.1.1
)或IPv6(如2001:db8::1
)。网段:使用CIDR表示法(如
192.168.1.0/24
)。域名:需通过Nginx的
resolver
指令配置DNS解析(如deny .example.com;
)。all:匹配所有客户端。
匹配规则:
指令按配置顺序依次检查,第一条匹配的规则生效,后续规则不再执行。
若无匹配规则,默认允许访问(相当于
allow all;
)。
二、配置示例
示例1:允许单个IP访问
location / { allow 192.168.1.100; deny all; }
效果:仅允许IP为
192.168.1.100
的客户端访问,其他IP均被拒绝。
示例2:拒绝单个IP访问
location /admin/ { deny 203.0.113.5; allow all; }
效果:拒绝
203.0.113.5
访问/admin/
路径,其他IP允许访问。
示例3:允许IP段访问
server { listen 80; server_name example.com; location / { allow 192.168.1.0/24; deny all; } }
效果:仅允许
192.168.1.0
至192.168.1.255
网段访问,其他IP拒绝。
示例4:拒绝IP段访问
http { ... server { location / { deny 10.0.0.0/8; allow all; } } }
效果:拒绝
10.0.0.0
至10.255.255.255
网段访问,其他IP允许。
示例5:允许域名访问
location / { allow .example.com; # 允许example.com及其子域名 deny all; }
注意:需在
http
块中配置resolver
指令解析域名:http { resolver 8.8.8.8; # 使用Google DNS解析 ... }
示例6:拒绝域名访问
location / { deny .malicious-domain.com; allow all; }
效果:拒绝来自
malicious-domain.com
及其子域名的请求。
三、实际应用场景
场景1:实现IP白名单
location /api/ { allow 192.168.1.100; allow 203.0.113.0/24; deny all; }
用途:仅允许内部服务器(
192.168.1.100
)和合作伙伴网段(203.0.113.0/24
)访问API接口。
场景2:防止恶意爬虫
http { geo $malicious_bots { default 0; 10.0.0.0/8 1; # 标记恶意IP段 192.168.0.0/16 1; } server { location / { if ($malicious_bots) { return 403; # 直接拒绝恶意IP } allow all; } } }
用途:通过
geo
模块标记恶意IP段,并返回403禁止访问。
场景3:限制后台访问
server { location /admin/ { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; allow 192.168.1.0/24; deny all; } }
用途:结合
auth_basic
实现双重验证,仅允许内网IP访问后台管理界面。
四、注意事项
指令顺序敏感:
Nginx按配置顺序匹配规则,第一条匹配的规则生效。例如:
deny all; # 此规则会阻止所有访问 allow 192.168.1.100; # 永远不会执行
精确匹配优先:
优先配置具体IP,再配置网段,最后用
deny all
或allow all
兜底。日志记录:
结合
access_log
和error_log
记录被拒绝的请求,便于分析攻击行为:access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn;
性能影响:
频繁的IP匹配可能略微增加CPU负载,建议对高频访问路径谨慎使用。
动态IP处理:
若需动态更新IP列表,可结合
Lua
模块或第三方工具(如fail2ban
)实现自动化封禁。
五、总结
allow
和deny
指令是Nginx访问控制的基础工具,通过灵活配置IP、网段和域名规则,可实现精细化的权限管理。在实际应用中,需注意指令顺序、匹配规则及性能优化,确保既保障安全,又不影响正常业务访问。
本文由@战地网 原创发布。
该文章观点仅代表作者本人,不代表本站立场。本站不承担相关法律责任。
如若转载,请注明出处:https://www.zhanid.com/biancheng/4242.html