Nginx利用444实现PDF大文件防爬

PDF、Zip 等大文件通常是流量消耗的“重灾区”。如果被搜索引擎或恶意爬虫频繁抓取,不仅白白浪费带宽,还会造成不必要的磁盘 I/O。本文分享如何结合 Nginx 的 map 变量,精准拦截所有针对 PDF 的抓取行为。

1. 为什么 PDF 需要特殊防护?

  • 体积大:一个 PDF 动辄几 MB 甚至上百 MB。
  • 多线程抓取:很多爬虫支持断点续传,会开启多个线程反复请求文件的不同分片,瞬间榨干带宽。
  • SEO 无用论:如果你的 PDF 只是附件,被搜索引擎收录反而可能分走主页的权重。

2. 配置实现:PDF 专属拦截块

在你的站点配置文件(.conf)中,加入以下针对性逻辑。请确保此段代码位于 PHP 处理逻辑之前。

# 拦截所有 PDF 文件的抓取请求
location ~* \.pdf$ {
    # 1. 命中自定义黑名单 (is_bad_bot) 直接掐断
    if ($is_bad_bot) {
        return 444;
    }

    # 2. 拦截所有包含 spider/bot 关键字的通用爬虫
    # ~* 表示不区分大小写的正则匹配
    if ($http_user_agent ~* "spider|bot|crawl|slurp|sohu-search|lycos|robozilla") {
        return 444; 
    }

    # 3. 正常用户:设置过期时间并强制下载(可选)
    expires      30d;
    add_header Content-Disposition "attachment"; 
}

3. 技术解析:双重防线

  • 第一道防线(is_bad_bot):利用我们在主配置文件中定义的 map 变量,拦截那些已知的流氓工具(如 AhrefsBot)。
  • 第二道防线(正则过滤):通过简单的正则 spider|bot,将所有自称是“机器人”的请求一网打尽。
  • 返回 444 的精妙之处:与 403 不同,444 直接关闭 TCP 连接。爬虫连文件头(Header)都拿不到,更无法得知文件的大小,从而彻底打消了它继续抓取的念头。

4. 辅助手段:robots.txt

虽然 Nginx 已经“物理隔离”了请求,但为了更文明地引导搜索引擎,建议在根目录的 robots.txt 中同步声明:

User-agent: *
Disallow: /*.pdf$

总结

通过 Nginx 规则将 PDF 文件请求重定向至 444 黑洞,是保护服务器带宽最直接、最粗暴但也最有效的方法。这不仅能有效防范恶意扫描,还能让有限的带宽资源真正服务于正常用户。

作者:霍欣标,如若转载,请注明出处:https://www.bigengwu.cn/shu/367.html

霍欣标的头像霍欣标站长
上一篇 2026-03-11 21:57
一个数学公式终结52人团队的排班内耗
下一篇 2026-04-02 21:57

相关推荐

博主人懒,应管局要求暂不开启站内私信和评论功能,如需帮助请发邮件。

邮箱账号:1969600480@qq.com