浏览器访问 → 放行(正常人访问)
指定搜索引擎蜘蛛(百度、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
}
这个方案不需要添加IP白名单,因为浏览器访问是基于UA判断的
如果你的网站需要被其他特定爬虫访问(比如监控服务),需要在 $is_allowed_bot 的 map 里添加对应的 UA 关键词
如果你需要保留自己的IP白名单(以防误拦),可以在 map 里加上 $remote_addr 判断
- 用AI制作网站指令
- 已经是最后一篇了



