一、nginx配置限制IP访问
要在 Nginx 配置中添加 IP 限制,阻止来自指定公网 IP 地址段的访问,并且只对特定路径进行限制,可以在 location 配置中使用 deny 和 allow 指令来控制访问。
二、案例
1. 需求
对来自特定公网的地址段,禁止访问 /aipassweb-hx-api/biz/task-reflow/queryAlgorithm这个API接口。
下面是优化后的配置:
upstream backend {server backend1.example.com;}server {listen 8808;server_name 10.127.192.5;location / {proxy_pass_header Server;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Scheme $scheme;proxy_pass http://backend;}# 精确匹配目标路径location = /aipassweb-hx-api/biz/task-reflow/queryAlgorithm {# 屏蔽特定IP(优先级高于allow all)deny 10.127.192.249;# 禁止IP段deny 60.176.143.233/29;deny 182.150.55.94/24;deny 117.39.60.106;# 允许其他所有IP访问allow all;proxy_pass_header Server;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Scheme $scheme;proxy_pass http://backend;}}
配置说明:
-
deny 指令:用来禁止指定的 IP 地址段或单个 IP 地址访问。可以使用 CIDR(如 /24、/29)表示子网地址段,也可以直接指定单个 IP 地址。
-
allow 指令:用于允许特定 IP 地址段或所有 IP 地址访问。在这里,allow all; 确保其他未被拒绝的 IP 地址可以正常访问。
-
顺序与优先级:Nginx 配置文件中,deny 的优先级高于 allow,因此在该路径下,首先会检查 deny 列表,如果匹配上则拒绝访问,未匹配的 IP 地址则允许访问。
优化后的配置
- 每个需要被拒绝访问的公网地址或地址段都被单独列出,并且使用 deny 指令进行限制。
- allow all 确保其他没有在 deny 列表中的 IP 地址能够访问此路径。
这种方式适合用于特定路径的 IP 访问控制,而其他路径则不会受到这些规则的影响。
2. 测试是否生效
- 从deny的IP节点【10.127.192.249】来curl测试该url接口,看看返回结果
返回403 Forbidden,说明生效~ - 从其他未限制的节点curl测试访问,接口返回正常
OK