正确配置方法
在你的 Nginx 配置文件中(如 /etc/nginx/nginx.conf 或站点配置 sites-enabled/default),在 server 块或 http 块中添加:
server {
listen 80;
server_name your-domain.com;
# 黑名单:禁止 39.101.92.0/24 整个 C 段
deny 39.101.92.0/24;
# 允许其他所有 IP
allow all;
# 其他配置...
location / {
proxy_pass http://backend;
}
}
顺序很重要! Nginx 按从上到下的顺序匹配
deny/allow,所以deny必须写在allow all;之前。
如果要禁止多个 IP 段(推荐用 include 管理)
为了可维护性,建议将黑名单单独放在一个文件中:
1. 创建黑名单文件
# /etc/nginx/blacklist.conf
deny 39.101.92.0/24;
deny 185.185.185.0/24;
deny 1.2.3.4;
# 可继续添加...
2. 在 server 块中引入
server {
listen 80;
server_name your-domain.com;
include /etc/nginx/blacklist.conf;
allow all;
location / {
# ...
}
}
3. 重载 Nginx
nginx -t && nginx -s reload
为什么用 39.101.92.0/24?
39.101.92.x是一个 C 类网段,子网掩码为255.255.255.0。- CIDR 表示法:
/24表示前 24 位是网络号,后 8 位是主机号(共 2⁸ = 256 个 IP)。 - 所以
39.101.92.0/24覆盖了39.101.92.0到39.101.92.255。
注意:
39.101.92.0和39.101.92.255通常是网络地址和广播地址,实际可用 IP 是.1~.254,但 Nginx 的deny会匹配整个范围,无需担心。
验证是否生效
- 从被禁 IP 段的机器访问你的网站,应返回 403 Forbidden。
- 查看 Nginx 日志:
[error] ... access forbidden by rule, client: 39.101.92.xxx
重要提醒
- Nginx 的
deny是基于客户端真实 IP 的。如果你用了 CDN(如 Cloudflare、阿里云 CDN),Nginx 看到的是 CDN 节点 IP,不是真实用户 IP!- 此时你需要:
- 先通过
real_ip模块获取真实 IP(设置set_real_ip_from+real_ip_header X-Forwarded-For) - 再用
deny限制真实 IP
- 先通过
- 此时你需要:
- 示例(使用 CDN 时):
server { # 告诉 Nginx 哪些是可信代理(CDN IP 段) set_real_ip_from 103.21.244.0/22; # Cloudflare set_real_ip_from 39.101.92.0/24; # 如果这是你的反代IP?一般不是 real_ip_header X-Forwarded-For; # 然后再 deny deny 39.101.92.0/24; allow all; }
总结
要禁止 39.101.92.*,只需在 Nginx 的 server 块中加入:
deny 39.101.92.0/24;
allow all;
简单、高效、原生支持。
适用于直接访问(无 CDN)场景。
如有 CDN,需先配置 real_ip 获取真实 IP。