防盗链和限流是nginx安全加固最常用有效的两项基础策略:前者通过valid_referers指令校验referer白名单防止静态资源盗链,后者用limit_req_zone和limit_conn_zone分别控制请求速率与并发连接,二者原生支持、配置轻量、效果直接。

防盗链和限流是Nginx安全加固中最常用、最见效的两项基础策略。前者守住资源出口,防止带宽被白嫖;后者卡住请求入口,避免服务被刷垮。两者不依赖额外模块,原生支持,配置轻量但效果直接。
防盗链:用Referer白名单守住静态资源
盗链本质是他人网站直接引用你服务器上的图片、视频、JS/CSS等静态文件,消耗你的带宽却不带来任何流量或收益。Nginx通过valid_referers指令检查请求头中的Referer字段,只放行可信来源。
- 基础写法:在server或location块中加入以下配置,适配常见图片、视频、脚本后缀
location ~* \.(jpg|jpeg|png|gif|webp|mp4|flv|css|js)$ {
valid_referers none blocked *.example.com example.com;
if ($invalid_referer) {
return 403;
# 或重定向到提示图:rewrite ^/.*$ /hotlink-denied.png break;
}
}-
none允许直接输入URL访问(如用户书签打开),避免误拦 -
blocked覆盖Referer被浏览器清除或伪造为空的情况(如HTTPS→HTTP跳转) -
*.example.com和example.com构成完整白名单,含子域名和主域 - 注意:该功能由
ngx_http_referer_module提供,默认已编译进大多数Nginx发行版
限流:按IP控制请求速率与并发连接
限流不是为了拒绝用户,而是把恶意扫描、爬虫、暴力破解等异常流量压在可控范围内,保障正常访问不中断。Nginx提供两种互补机制:
- 请求速率限制(漏桶算法):适合防爆破、防爬虫
http {
limit_req_zone $binary_remote_addr zone=rate_limit:10m rate=5r/s;
}
location /login {
limit_req zone=rate_limit burst=10 nodelay;
proxy_pass http://backend;
}-
rate=5r/s表示每个IP每秒最多5个请求 -
burst=10允许短时突发10个请求,超出则直接返回503 -
nodelay禁用排队延迟,让超限请求立刻失败,降低后端压力
- 并发连接限制:适合防下载刷、大文件拖拽攻击
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
}
location /download {
limit_conn conn_limit 3;
limit_rate 500k;
}-
limit_conn限制单IP最多3个并发连接 -
limit_rate对每个连接限速500KB/s,避免带宽被单个连接占满
组合使用更可靠
单独配置防盗链或限流都有效,但真实攻击往往多线并行。例如:一个爬虫既高频请求登录接口(需限流),又批量抓取图片资源(需防盗链)。建议分层部署:
- 全局启用
server_tokens off隐藏版本号,减少信息泄露 - 对
/static/、/images/等资源路径加防盗链 - 对
/api/、/login、/admin等敏感路径加请求限流 - 对大文件下载目录加并发+速率双重限制
每次修改后执行nginx -t && nginx -s reload验证并热加载,无需重启服务。











