《Nginx跳转代码》根据爬虫、设备、来源判断,实现nginx屏蔽/跳转与展示控制

[复制链接]
sheep 发表于 2026-7-28 20:23 | 显示全部楼层 |阅读模式
Nginx 多场景跳转模板,内置完整蜘蛛 UA 库,支持三种常用访问控制,配置区域配置对应模块即可,自带防循环重定向,可跳转域名或目录。

《爬虫/蜘蛛/设备标识全量识别清单》


本文中的爬虫/蜘蛛/设备标识更新/补充,均会在上述文章内同步,复制代码后注意核对

  1. # ==============================================
  2. # Nginx 跳转控制通用模板
  3. # 功能:爬虫识别 | 设备识别 | 来源识别 | 防循环重定向
  4. # 支持:域名前缀跳转 / 完整域名跳转 / 指定目录跳转
  5. # ==============================================

  6. # ====================== 【配置区】 按需修改即可 ======================
  7. # 1. 通用配置
  8. set $redirect_code 302;          # 重定向状态码:301=永久重定向  302=临时重定向

  9. # 2. 爬虫配置
  10. set $spider_redirect "";         # 爬虫跳转目标,空=放行不跳转;示例:/spider.html 或 http://xxx.com

  11. # 3. 设备跳转配置(留空=该设备不执行跳转)
  12. set $pc_redirect_target "";      # PC端跳转目标;示例:www1.$base_domain 或 /pc/
  13. set $tablet_redirect_target "";  # 平板端(iPad等)跳转目标;示例:www1.$base_domain 或 /pad/
  14. set $mobile_redirect_target "";  # 手机端跳转目标;示例:m.$base_domain 或 /mobile/

  15. # 4. 来源跳转配置
  16. set $non_search_redirect "";     # 非搜索引擎&非AI来源跳转目标,空=不启用;示例:/error.html
  17. set $ai_referer_redirect "";     # AI平台来源单独跳转目标,空=不单独处理

  18. # 5. 防循环重定向规则(匹配该规则则取消跳转,避免死循环)
  19. # 域名前缀跳转填:^www1\. ;目录跳转填:^/mobile/
  20. set $loop_guard_pattern "";
  21. # ====================== 【配置区结束】 ======================


  22. # ---------------------- 1. 基础域名提取 ----------------------
  23. # 自动移除 www. / www1. / m. / wap. 前缀,提取裸域名
  24. set $base_domain "$host";
  25. if ($host ~* "^(www|www1|m|wap)\.(.+)$") {
  26.     set $base_domain $2;
  27. }


  28. # ---------------------- 2. 设备类型精准识别 ----------------------
  29. # 初始化标记
  30. set $is_pc 0;
  31. set $is_tablet 0;
  32. set $is_mobile 0;

  33. # 优先级1:识别手机端
  34. if ($http_user_agent ~* "(mobile|iphone|ipod|android.*mobile|windows\s*phone|blackberry|opera\s*mini|ucweb|meego|silk|kindle|playbook|nintendo|playstation|wii)") {
  35.     set $is_mobile 1;
  36. }

  37. # 优先级2:识别平板端(iPad/安卓平板,避免误判为PC)
  38. if ($is_mobile = 0) {
  39.     if ($http_user_agent ~* "(ipad|android.*tablet|tablet)") {
  40.         set $is_tablet 1;
  41.     }
  42. }

  43. # 优先级3:剩余识别为PC桌面端
  44. if ($is_mobile = 0) {
  45.     if ($is_tablet = 0) {
  46.         if ($http_user_agent ~* "(windows\s*nt|macintosh|mac\s*os\s*x|x11|cros|linux\s*(x86|amd64|i686))") {
  47.             set $is_pc 1;
  48.         }
  49.     }
  50. }


  51. # ---------------------- 3. 爬虫/蜘蛛全量识别 ----------------------
  52. # 覆盖范围:通用泛匹配 + 全球主流AI蜘蛛 + 中国主流AI蜘蛛 + 全球搜索引擎 + 中国搜索引擎 + 其他平台蜘蛛
  53. set $is_spider 0;
  54. if ($http_user_agent ~* "(bot|spider|crawl|crawler|index|archive|gptbot|oai-searchbot|chatgpt-user|claudebot|claude-searchbot|claude-user|xai-searchbot|xai-bot|xai-grok|meta-externalagent|meta-externalfetcher|perplexitybot|perplexity-user|huggingfacebot|amazonbot|coherebot|inflectionbot|google-extended|ccbot|doubaobot|yuanbaobot|hunyuanbot|qwenbot|tongyibot|wenxinbot|moonshotbot|deepseekbot|kimibot|zhipubot|youbot|google|bing|yahoo|yandex|duckduckbot|slurp|applebot|baidu|sogou|bytespider|shenma|youdao|360spider|soso|toutiao|semrush|ahrefs|petalbot|exabot|facebot|facebook|twitter|linkedin|telegram|ia_archiver)") {
  55.     set $is_spider 1;
  56. }


  57. # ---------------------- 4. 访问来源(Referrer)识别 ----------------------
  58. set $is_search_referer 0;
  59. set $is_ai_referer 0;

  60. # 识别搜索引擎来源(支持多级域名,如google.co.jp、baidu.com.cn)
  61. if ($http_referer ~* "\.(google|bing|yahoo|yandex|duckduckgo|apple|baidu|sogou|shenma|sm|youdao|360|soso|toutiao)(\.[a-z0-9\-]+){0,2}\/") {
  62.     set $is_search_referer 1;
  63. }

  64. # 识别AI平台来源
  65. if ($http_referer ~* "\.(openai|anthropic|claude|xai|perplexity|huggingface|cohere|inflection|meta|gemini|doubao|wenxin|tongyi|qianwen|hunyuan|moonshot|deepseek)(\.[a-z0-9\-]+){0,2}\/") {
  66.     set $is_ai_referer 1;
  67. }


  68. # ---------------------- 5. 跳转目标计算(优先级从高到低) ----------------------
  69. set $final_target "";

  70. # 优先级1:爬虫专属逻辑
  71. if ($is_spider = 1) {
  72.     set $final_target $spider_redirect;
  73. }

  74. # 优先级2:AI平台来源单独跳转(非爬虫时生效)
  75. if ($is_spider = 0) {
  76.     if ($is_ai_referer = 1) {
  77.         set $final_target $ai_referer_redirect;
  78.     }
  79. }

  80. # 优先级3:非搜索&非AI来源跳转(非爬虫、未触发AI跳转时生效)
  81. if ($is_spider = 0) {
  82.     if ($is_search_referer = 0) {
  83.         if ($is_ai_referer = 0) {
  84.             set $final_target $non_search_redirect;
  85.         }
  86.     }
  87. }

  88. # 优先级4:设备维度跳转(非爬虫、未触发来源跳转时生效)
  89. if ($is_spider = 0) {
  90.     if ($final_target = "") {
  91.         if ($is_pc = 1) {
  92.             set $final_target $pc_redirect_target;
  93.         }
  94.         if ($is_tablet = 1) {
  95.             set $final_target $tablet_redirect_target;
  96.         }
  97.         if ($is_mobile = 1) {
  98.             set $final_target $mobile_redirect_target;
  99.         }
  100.     }
  101. }


  102. # ---------------------- 6. 防循环重定向检测 ----------------------
  103. if ($loop_guard_pattern != "") {
  104.     # 域名前缀场景防护
  105.     if ($host ~* $loop_guard_pattern) {
  106.         set $final_target "";
  107.     }
  108.     # 目录跳转场景防护
  109.     if ($request_uri ~* $loop_guard_pattern) {
  110.         set $final_target "";
  111.     }
  112. }


  113. # ---------------------- 7. 执行跳转 ----------------------
  114. if ($final_target != "") {
  115.     # 目标包含http/https → 直接跳转到完整域名
  116.     if ($final_target ~* "^https?://") {
  117.         return $redirect_code $final_target;
  118.     }
  119.     # 目标以/开头 → 站内目录跳转
  120.     if ($final_target ~* "^/") {
  121.         return $redirect_code $final_target;
  122.     }
  123.     # 其他情况 → 视为域名前缀,拼接完整域名+原请求路径
  124.     return $redirect_code http://$final_target$request_uri;
  125. }
复制代码











您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号
Archiver|手机版|小黑屋|社区规范|绵羊优创

相关侵权、举报、投诉及建议等,请发 E-mail:2363400792@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|京ICP备19037745号-2公安备案京公网安备11011502037529号

在本版发帖
关注公众号
QQ客服返回顶部
来点音乐
优聚封面
歌曲名称
歌手名称
0:00 0:00
顺序播放
歌词加载中...