«

Nginx限制IP访问,拉黑恶意爬虫IP配置

时间:2026-10-7 07:30     作者:emer     分类: 无


前言

网站被恶意爬虫狂刷,服务器CPU跑满?或者有人恶意攻击你的网站?可以用 Nginx 直接把这些 IP 拉黑,不让他们访问。本文讲一下怎么配置 IP 访问控制。

怎么找到恶意 IP

先看 Nginx 访问日志,找出访问最频繁的 IP:

# 统计访问次数最多的前 20 个 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

如果某个 IP 访问量特别大,可能就是恶意爬虫或者攻击。

拉黑单个 IP

在 Nginx 配置里加:

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;

    # 拉黑某个 IP
    location / {
        deny 192.168.1.100;
        allow all;
    }
}

被拉黑的 IP 访问会返回 403 Forbidden。

拉黑 IP 段

拉黑整个 C 段

deny 192.168.1.0/24;

就是拉黑 192.168.1.1 到 192.168.1.255。

拉黑多个 IP

deny 192.168.1.100;
deny 192.168.1.101;
deny 192.168.1.102;

白名单模式(只允许某些 IP 访问)

如果想只允许特定 IP 访问(比如后台管理页面):

# 只允许内网 IP 访问 /admin
location /admin {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;
}

其他 IP 访问 /admin 都会返回 403。

用 include 单独管理黑名单

IP 多了不想写在主配置里,可以单独放一个文件:

第一步:创建黑名单文件

vi /etc/nginx/conf.d/blacklist.conf

内容:

deny 192.168.1.100;
deny 192.168.1.101;
deny 10.0.0.0/8;

第二步:在主配置里引入

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;

    # 引入黑名单
    include /etc/nginx/conf.d/blacklist.conf;

    location / {
        try_files $uri $uri/ =404;
    }
}

这样以后加黑名单只要改 blacklist.conf 文件,然后重载 Nginx 就行。

对某个目录单独限制

比如只对 /admin 目录限制:

location /admin {
    allow 127.0.0.1;
    allow 192.168.1.0/24;
    deny all;

    root /var/www/html;
    index index.php;
}

检查配置并重载

nginx -t
nginx -s reload

用防火墙拉黑(更彻底)

如果想在系统层面拉黑,用 firewall-cmd:

# 拉黑单个 IP
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' reject"

# 重新加载
firewall-cmd --reload

或者用 iptables:

iptables -I INPUT -s 192.168.1.100 -j DROP

常见坑

坑1:改了黑名单忘了 reload

加了黑名单,但 IP 还能访问。

原因: Nginx 没重载。

解决:

nginx -s reload

坑2:把自己 IP 拉黑了

测试的时候不小心把自己 IP 也拉黑了,自己也访问不了了。

解决: 先从服务器上用 curl 测试:

curl -I http://127.0.0.1

确认没问题再 reload。

坑3:CDN 后面拿不到真实 IP

用了 CDN 之后,日志里全是 CDN 的 IP,看不到用户真实 IP。

解决: 先配置 Nginx 获取真实 IP:

set_real_ip_from CDN的IP段;
real_ip_header X-Forwarded-For;

这样日志里才能看到用户真实 IP,才能正确拉黑。

总结

操作 命令/配置
拉黑单个 IP deny 192.168.1.100;
拉黑 IP 段 deny 192.168.1.0/24;
白名单模式 allow 127.0.0.1; deny all;
单独黑名单文件 include /etc/nginx/conf.d/blacklist.conf;
重载生效 nginx -s reload

提醒: 拉黑 IP 之前先确认是不是真的恶意,别误杀正常用户。

遇到问题加QQ23979811 协助处理

标签: Nginx IP访问控制 黑名单 防爬虫 网站安全