防止网站被镜像的Nginx配置方法

2025.7.18 杂七杂八 1459
33BLOG智能摘要
33blog站长分享了使用Nginx防止网站被镜像的几种方法,称亲测有效。首先通过分析日志总结镜像请求特征,主要是User-Agent包含"bot"等关键词和Referer显示镜像站域名。基础防护方面设置了禁止特定User-Agent的规则,但需注意可能误伤正常爬虫。高级防护使用valid_referers对来源进行校验,但需包含合法CDN或代理服务来源。针对动态内容,配置fastcgi_param参数,PHP侧可据此返回假数据、添加水印或进行限流。此外还使用脚本自动更新IP黑名单,配合Fail2Ban自动封禁恶意IP,每天同步公开的恶意IP库。建议配置日志监控log_format和access_log,用于追踪可疑请求和统计攻击趋势。通过以上方法实施后,成功阻止了镜像站的抓取行为。作者表示后续会分享使用Cloudflare防火墙应对CC攻击的方法。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

实战分享:我用Nginx这几招,让镜像站彻底凉凉

防止网站被镜像的Nginx配置方法

大家好,我是33blog的站长。上周发现有个镜像站原封不动扒走了我所有内容,连CSS样式都没改,气得我当场血压飙升。今天就把我研究的Nginx反镜像方案分享给大家,亲测有效!

1. 识别镜像请求的特征

首先得知道镜像站是怎么偷内容的。通过分析日志,我发现这些请求有两个明显特征:

  • User-Agent里常带”bot”、”spider”等关键词
  • Referer直接显示镜像站的域名

有次甚至看到对方用wget -mirror这种粗暴方式抓取,真是毫不掩饰…

2. 基础防护:禁止特定User-Agent

在Nginx配置里加上这段,常见的爬虫工具就废了:

if ($http_user_agent ~* (wget|curl|httrack|webzip|sitegrabber|leechftp)) {
    return 403;
}

注意:有些正规爬虫(比如Googlebot)也会被误伤,需要额外加白名单。

3. 高级防御:Referer校验大法

这是我用得最爽的配置,直接阻断非本站来源的请求:

valid_referers none blocked *.33blog.me 33blog.me;
if ($invalid_referer) {
    return 403;
}

有个坑要注意:某些CDN或代理服务可能不带Referer,记得把合法来源加进valid_referers

4. 动态内容干扰策略

我在WordPress里加了这段代码,当检测到可疑请求时:

location ~ .php$ {
    fastcgi_param HTTP_IS_MIRROR $invalid_referer;
}

然后PHP端根据这个参数,可以:

  • 返回假数据
  • 插入”这是盗版内容”水印
  • 限流降速(折磨对方的服务器)

5. 终极杀招:IP黑名单自动更新

写了个脚本每天同步公开的恶意IP库:

include /etc/nginx/conf.d/blockips.conf;

# 文件内容示例:
deny 123.123.123.123;
deny 111.222.0.0/16;

配合Fail2Ban还能自动封禁频繁请求的IP,效果拔群!

6. 别忘了监控和日志

最后提醒大家,在nginx.conf里加上:

log_format anti_mirror '$remote_addr - $invalid_referer';
access_log /var/log/nginx/mirror.log anti_mirror if=$invalid_referer;

这样所有可疑请求都无所遁形,还能统计攻击趋势。

经过这套组合拳,那个镜像站三天后就停止抓取了。如果你们有更好的方法,欢迎在评论区交流~ 下次我准备写《如何用Cloudflare防火墙对付CC攻击》,感兴趣的话记得订阅!

评论

  • 这个Nginx配置太实用了,我也遇到过类似问题,直接用上试试 😊