有钱Code头像

有钱Code

  • 文章13
  • 阅读5238

博主寄语

记录,是为了更好地出发。

友情链接

首页 技术 正文内容

站群蜘蛛池白名单模式,只放行浏览器和指定蜘蛛

热心网友 技术 2026-08-13 17:37:39 65

浏览器访问 → 放行(正常人访问)

指定搜索引擎蜘蛛(百度、Google、360、搜狗、必应等)→ 放行

其他AI爬虫和机器人(如 ChatGPT、ClaudeBot、GPTBot 等)→ 禁止

这个需求比"只允许白名单IP"更简单,因为不需要判断IP,只需要判断 User-Agent。

# ===== 在 server 块外部定义 map =====
# 定义允许的搜索引擎蜘蛛
map $http_user_agent $is_allowed_bot {
    default 0;
    ~*Baiduspider 1;
    ~*Googlebot 1;
    ~*360Spider 1;
    ~*Sogou 1;
    ~*Yahoo 1;
    ~*bingbot 1;
    ~*Bytespider 1;      # 头条
    ~*Sosospider 1;      # 搜搜
    ~*YisouSpider 1;     # 神马
}

# 定义浏览器 UA 关键词(只放行主流浏览器)
map $http_user_agent $is_browser {
    default 0;
    ~*Mozilla/5.0 1;       # 绝大多数浏览器都包含 Mozilla/5.0
    ~*Chrome 1;
    ~*Safari 1;
    ~*Firefox 1;
    ~*Edg 1;
    ~*Opera 1;
    ~*MSIE 1;              # IE
    ~*Trident 1;           # IE 11
}
# ===== map 定义结束 =====

server
{
    listen 80;
    server_name *.footballvpn.buzz *.softwarevpn.buzz;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/zhizhuchi;

    # ===== 访问控制规则 =====
    # 逻辑:
    # 1. 如果是浏览器 ($is_browser=1) 或 允许的蜘蛛 ($is_allowed_bot=1) → 放行
    # 2. 其他所有 (AI爬虫、恶意机器人等) → 403

    # 先假设禁止 (ban=1)
    set $ban 1;

    # 如果是浏览器,放行 (ban=0)
    if ($is_browser = 1) {
        set $ban 0;
    }

    # 如果是允许的搜索引擎蜘蛛,放行 (ban=0)
    if ($is_allowed_bot = 1) {
        set $ban 0;
    }

    # 如果 ban 仍然是 1,则返回 403
    if ($ban = 1) {
        return 403;
    }
    # ===== 访问控制规则结束 =====

    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/zhizhuchi.com.conf;
    #CERT-APPLY-CHECK--END
    include /www/server/panel/vhost/nginx/extension/zhizhuchi.com/*.conf;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-56.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/zhizhuchi.com.conf;
    #REWRITE-END

    # 禁止访问的敏感文件
    location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$
    {
        return 404;
    }
    
    # 禁止访问的敏感目录
    location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    access_log  /www/wwwlogs/zhizhuchi.com.log;
    error_log  /www/wwwlogs/zhizhuchi.com.error.log;

    #Monitor-Config-Start 网站监控报表日志发送配置
    access_log syslog:server=unix:/tmp/bt-monitor.sock,nohostname,tag=2__access monitor;
    error_log syslog:server=unix:/tmp/bt-monitor.sock,nohostname,tag=2__error;
    #Monitor-Config-End
}

站群蜘蛛池白名单模式,只放行浏览器和指定蜘蛛  第1张

这个方案不需要添加IP白名单,因为浏览器访问是基于UA判断的

如果你的网站需要被其他特定爬虫访问(比如监控服务),需要在 $is_allowed_bot 的 map 里添加对应的 UA 关键词

如果你需要保留自己的IP白名单(以防误拦),可以在 map 里加上 $remote_addr 判断

文章目录
    搜索