LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]网站总被恶意访问?Nginx安全防护的三大实战技巧:防盗链、防爆破、防爬虫

admin
2025年12月4日 1:48 本文热度 110

在所有被忽视的后台技术中,Nginx 安全配置大概排在鄙视链最底端。大家都把它当成一个“反向代理 + 静态资源服务器”,但只要你把服务放到公网,Nginx 就天然成为第一道防线。越是简单的配置,越容易埋坑;越是常见的攻击方式,也越集中在最容易被忽略的地方。

今天这一篇,把三个最常见、最实用、最容易上手的安全策略讲透:

  • 防盗链:保护你的图片、视频、静态资源不被白嫖。

  • 防爆破:限制恶意暴力登录、不停访问的爬虫、脚本工具。

  • 防爬虫:用 Nginx 拦掉不守规矩的机器人和采集脚本。

内容聚焦“能用、好用、可直接上线”的配置,不炫技、不堆命令。






一、为什么 Nginx 要承担安全防护?



互联网服务的每一层都是“有缝的球”,但 Nginx 恰好处于:

  • 最外层暴露面最大
  • 访问频率最高
  • CPU 最能抗
  • 性能最稳定**

它天然适合作为安全策略的第一环节。

真实场景里,攻击者不会先研究你后端是不是 Spring Boot、Django、Node.js;他们只会看到80/443 端口,看到 Nginx,就先试一圈常规攻击。

你会遇到:

  • 静态资源被某短视频 APP 偷链
  • API 被无脑爬虫一天几百万请求轰炸
  • 登录接口被脚本暴力爆破
  • Bad Bot 无差别扫描
  • 图片外链导致 OSS/对象存储 CDN 费用飙升

这些问题都比 SQL 注入、RCE 更常见与真实。

所以 Nginx 的安全不是“可选项”,是“必选项”。





二、防盗链:保护你的静态资源不被白嫖



最常见场景:你的图片、视频、音频资源被别的网站或 APP 直接引用,你承担流量,他们赚用户。

尤其当你使用 OSS、COS、七牛等对象存储时,一旦被盗链,账单比 DDoS 还可怕

Nginx 防盗链的核心机制是:检查 Referer 请求头,确定访问来源是否合法。

1、最实用的防盗链配置

location~*\.(jpg|jpeg|png|gif|mp4|webm|svg)${
    valid_referersnoneblocked*.yourdomain.com;
    if($invalid_referer){
        return403;
    }
}

解释一下:

项目
含义
valid_referers none blocked
表示允许直接访问(无 Referer)和被浏览器屏蔽的 Referer
*.yourdomain.com
允许的合法访问域名
$invalid_referer
自动判断是否非法来源

如果非法访问:

  • 返回 403
  • 或者你也可以返回一张“禁止盗链”的图片:
if($invalid_referer){
    return302https://yourdomain.com/static/stop.jpg;
}

这种方式在商业项目中非常常见。


本文由“壹伴编辑器”提供技术支持

2、防盗链常见误区

误区 1:防盗链会影响 SEO?

不会。 搜索引擎其实不加载你的图片放到他们自己的站点,只是记录你的图片 URL。

误区 2:必须严格验证 Referer?

Referer 是可以伪造的,这不是防盗链的最终武器,只是第一层防御。

真正防盗链需要:

  • CDN 鉴权(例如 Key 鉴权)
  • 签名 URL
  • 限时下载

但 Nginx 的 Referer 防盗链是最轻量和最易用的一层。





三、防爆破:限制恶意攻击者狂刷接口


攻击者最喜欢干的一件事,就是对你的登录口发起“密码爆破”:

admin/123456  
admin/admin  
test/123456  
root/000000

每天 10 万次,你的接口还能撑多久? 你的数据库连接数能撑多久? 你的服务器 CPU 能撑多久?

Nginx 有一对非常实用的模块:

limit_req —— 限制每秒请求数

limit_conn —— 限制同时连接数

两者组合,就能有效防爆破、限速、限频,效果极佳。

1、最常见的防爆破配置:限流登录接口

# 定义一个名叫 one 的限流区
limit_req_zone$binary_remote_addrzone=one:10mrate=5r/s;

server{
    location/login{
        limit_reqzone=oneburst=10nodelay;
        proxy_passhttp://backend;
    }
}

解释:

参数
含义
rate=5r/s
每秒只允许同一 IP 发送 5 次请求
burst=10
突发流量允许额外 10 次
nodelay
超限直接拒绝,不排队

实测效果:

  • 正常用户:完全不受影响
  • 脚本攻击:基本被秒堵
  • 爆破攻击:无法持续

如果要更严格:

limit_req_zone $binary_remote_addr zone=strict:10m rate=1r/s;

每秒只允许 1 次,爆破脚本直接全挂。

2、API 全局限流(高并发系统常用)

limit_req_zone$binary_remote_addrzone=api_limit:20mrate=20r/s;

location/api/{
    limit_reqzone=api_limitburst=100nodelay;
}

适合:

  • 小型业务
  • 承载量有限的后端
  • 新上线业务不确定风险时

3、限制连接数(防止恶意建立大量连接)

limit_conn_zone$binary_remote_addrzone=addr:10m;

server{
    limit_connaddr20;# 同一IP最多保持20个连接
}

爬虫喜欢建立几十个连接加快抓取,这里直接限制死。





四、防爬虫:阻止坏机器人 + 高强度采集脚本



爬虫有两种:

  • 好爬虫:百度、Google、必应
  • 坏爬虫:采集站、人肉脚本、撞库扫描器、curl/requests 脚本等

目标不是封掉所有爬虫,而是封掉 无意义的恶意机器人

常见方法:

方法 1:User-Agent 黑名单(最简单)

if($http_user_agent~*(python|curl|scrapy|wget|bot|spider)){
    return403;
}

90% 的低质量脚本会被这一条干掉。

如果你需要强力一点:

map$http_user_agent$is_bad_agent{
    default0;
    "~*curl"1;
    "~*wget"1;
    "~*python"1;
    "~*scrapy"1;
    "~*spider"1;
}
server{
    if($is_bad_agent){
        return403;
    }
}

方法 2:封掉恶意频繁访问的 IP(自动封禁)

使用 Nginx 的 geo + limit_req 可以自动识别疯狂访问的 IP 并封掉。

方法 3:禁止频繁访问某些页面,如文章详情

大部分采集站最喜欢抓“文章详情页”,URL 通常符合某种固定规律,比如:

/article/12345

你可以给文章接口加限流:

location/article/{
    limit_reqzone=oneburst=20nodelay;
}

正常用户一秒刷新 1 次 采集脚本一秒抓 20 次,直接被拦住。

方法 4:禁止搜索引擎抓取某些资源

例如你不希望百度抓你的接口:

location/api/{
    if($http_user_agent~*(Baiduspider|Googlebot)){
        return403;
    }
}

这是非常常见的配置,避免无意义的搜索引擎压力。





五、真正的 Nginx 安全防护模板(可直接上线)



下面给你一个“全家桶模板”,可以直接加入你的生产配置:

server{
    # ----------------------------
    # 1. 防盗链(静态资源)
    # ----------------------------
    location~*\.(jpg|jpeg|png|gif|mp4|svg|webm)${
        valid_referersnoneblocked*.yourdomain.com;
        if($invalid_referer){
            return403;
        }
    }

    # ----------------------------
    # 2. 防爆破(限速登录)
    # ----------------------------
    limit_req_zone$binary_remote_addrzone=login:10mrate=5r/s;
    location/login{
        limit_reqzone=loginburst=10nodelay;
        proxy_passhttp://backend;
    }

    # ----------------------------
    # 3. 防爬虫(UA 黑名单)
    # ----------------------------
    if($http_user_agent~*(python|curl|wget|scrapy|bot|spider)){
        return403;
    }

    # ----------------------------
    # 4. IP 级别连接数限制
    # ----------------------------
    limit_conn_zone$binary_remote_addrzone=connperip:10m;
    limit_connconnperip20;

    # ----------------------------
    # 5. API 限流
    # ----------------------------
    limit_req_zone$binary_remote_addrzone=api:20mrate=20r/s;
    location/api/{
        limit_reqzone=apiburst=100nodelay;
        proxy_passhttp://backend;
    }
}

真正的生产环境一般就在这个基础上扩展。






总结


不论你的服务规模大或小,只要你面向公网,就会遭遇爬虫、爆破、盗链、扫描、撞库,这不是危言耸听,是所有上线项目的共性。

Nginx 的三板斧防护原则非常简单:

  • 防盗链,省钱。
  • 防爆破,保命。
  • 防爬虫,省资源。

你的服务在上线的那一刻,就应该让 Nginx 成为第一道稳定可靠的防线。


阅读原文:原文链接


该文章在 2025/12/5 18:51:00 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved