如何在NGINX中禁止指定恶意域名盗链本站脚本及静态文件
Nginx 拦截指定域名静态资源盗链配置
针对禁止指定域名调用本站gif、otf、jpg、jpeg、png、css、js类静态资源的需求,提供两种常用配置方案,按需选择即可。
方案1:白名单模式(推荐,防盗链更彻底)
仅允许本站域名发起的资源请求,所有外部域名(包含你要拦截的domain1.com、domain2.com、domain3.com)的盗链请求全部拦截,配置如下:
# 匹配需要做防盗链校验的静态资源后缀 location ~* \.(gif|otf|jpg|jpeg|png|css|js)$ { # 配置允许访问的来源,把下面的your-domain.com替换成你自己的站点域名,多个域名用空格分隔 valid_referers none blocked server_names *.your-domain.com your-domain.com; # 来源不在白名单内时直接返回403 if ($invalid_referer) { return 403; # 也可以替换成返回自定义防盗链提示图,比如 return 200 /anti-leech.png; 注意提示图本身不要放在这个location规则匹配的后缀范围内,避免死循环 } # 下方保留你原有的静态资源处理逻辑,比如root路径、缓存头配置等 # 示例: # root /var/www/your-site; # expires 7d; # add_header Cache-Control "public, no-transform"; }
方案2:黑名单模式(仅拦截指定域名,其余来源正常放行)
如果你只需要禁止domain1.com、domain2.com、domain3.com这几个域名的盗链,其余外部来源的请求不做限制,用如下配置:
location ~* \.(gif|otf|jpg|jpeg|png|css|js)$ { # 匹配到禁止的盗链域名时直接返回403 if ($http_referer ~* "domain1\.com|domain2\.com|domain3\.com") { return 403; } # 下方保留原有的静态资源处理逻辑 }
- 配置修改完成后,先执行
nginx -t命令校验配置语法是否正确,确认返回success后再执行nginx -s reload重载配置,避免配置错误导致站点无法访问。 - 白名单模式里的
none代表不带Referer头的请求(比如用户直接在浏览器地址栏输入资源URL访问)、blocked代表Referer被防火墙、代理篡改或删除的请求,如果不需要允许这类直接访问场景,把这两个参数从valid_referers里删掉即可。 - 黑名单模式如果需要新增拦截域名,直接在正则表达式里用
|分隔追加即可,注意域名里的.要加反斜杠转义。 - 如果站点使用了CDN服务,需要确认CDN回源时不会被规则拦截,可按需把CDN回源IP段配置为白名单,避免影响正常资源访问。
内容的提问来源于stack exchange,提问作者bpy
相关产品推荐
相关产品推荐

