You need to enable JavaScript to run this app. NGINX按国家屏蔽流量仅放行指定国家及搜索爬虫配置失效求助
优惠活动
大模型
产品
解决方案
定价
更多

NGINX按国家屏蔽流量仅放行指定国家及搜索爬虫配置失效求助

问题诊断
  • 核心逻辑错误:Nginx的set指令是覆盖赋值而非拼接赋值,你原配置中如果两个判断条件同时触发,第二个set $blocked G会直接覆盖第一个set $blocked I的结果,最终$blocked永远不可能等于IG,拦截逻辑永远不会触发。
  • 潜在配置问题:需要确认Nginx已加载ngx_http_geoip_module模块,且/usr/share/GeoIP/GeoIP.dat文件存在、Nginx进程有读取权限;部分新版本系统默认使用GeoIP2数据库,若你使用的是GeoIP2模块,原GeoIP1的配置语法不兼容。
修正配置

首先调整变量赋值逻辑为追加模式,修正后的完整配置如下:

# 部分系统需要在nginx.conf顶层添加该行加载模块,确认已加载可忽略
# load_module modules/ngx_http_geoip_module.so;

geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
   default no;
   RU yes;
}

server {
   listen 443 ssl http2;
   server_name _default;
   # 初始化blocked变量为空字符串
   set $blocked "";
   if ($allowed_country = no) {
      # 追加字符I
      set $blocked "${blocked}I";
   }
   if ($http_user_agent !~* (google|bing|yandex|msnbot|applebot)) {
      # 追加字符G
      set $blocked "${blocked}G";
   }
   # 只有两个条件都满足时blocked值为IG,才触发拦截
   if ($blocked = IG){
      return 444;
   }
   # 其余原有配置保持不变
   ...
}
验证方法

配置修改后执行nginx -t检查语法无误后重载配置,可通过境外代理直接访问、修改UA为爬虫后境外访问两种场景,验证规则是否符合预期。

内容的提问来源于stack exchange,提问作者jazzfriends

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:54:00