Files
GoProxy/GEO_FILTER.md
isboyjc a70df0d505 feat: add environment variable support for proxy authentication and geo-blocking
- Introduced `.env.example` for environment variable configuration.
- Updated `docker-compose.yml` to utilize environment variables for proxy settings.
- Implemented proxy authentication with Basic Auth and geo-blocking based on country codes.
- Added `GEO_FILTER.md` for documentation on geo-filtering configuration.
- Enhanced logging to indicate authentication status and blocked countries during proxy server startup.
2026-03-29 04:11:38 +08:00

5.6 KiB
Raw Blame History

地理过滤配置指南

GoProxy 支持通过国家代码过滤代理的出口位置,让你可以灵活控制代理池的地理分布。

🌍 配置方式

环境变量配置

通过 BLOCKED_COUNTRIES 环境变量设置需要屏蔽的国家代码:

# 默认屏蔽中国大陆CN
BLOCKED_COUNTRIES=CN

# 屏蔽多个国家(逗号分隔)
BLOCKED_COUNTRIES=CN,RU,KP,IR

# 不屏蔽任何国家(留空)
BLOCKED_COUNTRIES=

Docker Compose 配置

编辑 .env 文件:

# 屏蔽中国大陆和俄罗斯
BLOCKED_COUNTRIES=CN,RU

启动服务:

docker compose up -d

Docker Run 配置

docker run -d --name proxygo \
  -p 127.0.0.1:7776:7776 -p 127.0.0.1:7777:7777 -p 7778:7778 \
  -e BLOCKED_COUNTRIES=CN,RU \
  -e WEBUI_PASSWORD=your_password \
  -v "$(pwd)/data:/app/data" \
  ghcr.io/isboyjc/goproxy:latest

本地运行配置

export BLOCKED_COUNTRIES=CN,RU,KP
go run .

🗺️ 工作机制

双重过滤

地理过滤在两个阶段生效:

1. 启动清理阶段

  • 程序启动时自动扫描数据库
  • 删除所有屏蔽国家出口的代理
  • 日志输出:🧹 已清理 X 个屏蔽国家出口代理 (屏蔽: [CN RU])

2. 验证阶段

  • 新抓取的代理在验证时检查出口位置
  • 如果出口国家在屏蔽列表中,直接拒绝入池
  • 不会占用池子容量

国家代码识别

系统使用 ISO 3166-1 alpha-2 标准的两位国家代码:

出口位置格式CC City
示例:
  CN Beijing      → 国家代码 CN中国大陆
  HK Hong Kong    → 国家代码 HK香港
  US New York     → 国家代码 US美国
  RU Moscow       → 国家代码 RU俄罗斯

匹配规则:exit_location LIKE 'CC %'(国家代码 + 空格 + 城市)

📋 常用国家代码

亚洲

代码 国家/地区 代码 国家/地区
CN 中国大陆 HK 香港
TW 台湾 MO 澳门
JP 日本 KR 韩国
SG 新加坡 IN 印度
TH 泰国 VN 越南
KP 朝鲜 IR 伊朗

欧洲

代码 国家 代码 国家
RU 俄罗斯 GB 英国
DE 德国 FR 法国
NL 荷兰 SE 瑞典
UA 乌克兰 PL 波兰

美洲

代码 国家 代码 国家
US 美国 CA 加拿大
BR 巴西 MX 墨西哥
AR 阿根廷 CL 智利

完整国家代码列表:ISO 3166-1 alpha-2

🎯 使用场景

场景 1屏蔽中国大陆默认

BLOCKED_COUNTRIES=CN

适用

  • 需要海外 IP 代理
  • 避免被识别为中国大陆流量
  • 保留香港、澳门、台湾代理

场景 2屏蔽多个敏感地区

BLOCKED_COUNTRIES=CN,RU,KP,IR,SY

适用

  • 合规要求(避免某些国家的 IP
  • 地缘政治考虑
  • 防止特定地区的代理质量问题

场景 3仅使用欧美代理

# 屏蔽亚洲、非洲、中东等地区(示例,需根据实际需求调整)
BLOCKED_COUNTRIES=CN,IN,TH,VN,ID,PH,BD,PK,IR,IQ,SA,EG,NG,ZA

场景 4不做地理限制

BLOCKED_COUNTRIES=

适用

  • 需要最大化代理池容量
  • 对地理位置无特殊要求
  • 测试和开发环境

📊 实时查看

查看当前屏蔽配置

启动日志会显示:

[main] 🧹 已清理 15 个屏蔽国家出口代理 (屏蔽: [CN RU KP])

查看池中国家分布

通过 WebUI 的出口国家筛选器可以看到当前池中所有国家的代理分布。

数据库查询

# 查看所有代理的国家分布
sqlite3 data/proxy.db "
  SELECT SUBSTR(exit_location, 1, 2) AS country, COUNT(*) AS count 
  FROM proxies 
  GROUP BY country 
  ORDER BY count DESC;
"

# 查看特定国家的代理
sqlite3 data/proxy.db "
  SELECT address, exit_ip, exit_location, latency 
  FROM proxies 
  WHERE exit_location LIKE 'US %';
"

⚠️ 注意事项

  1. 大小写不敏感:国家代码会自动转为大写(cnCN
  2. 空格自动处理:前后空格会自动去除
  3. 重启生效:修改配置后需要重启服务
  4. 已有代理清理:启动时会清理数据库中的屏蔽国家代理
  5. 香港独立识别
    • 中国大陆代码:CN
    • 香港代码:HK(独立的国家代码)
    • 设置 BLOCKED_COUNTRIES=CN 不会影响香港代理

🧪 测试验证

测试 1屏蔽中国大陆

# 启动服务
export BLOCKED_COUNTRIES=CN
go run .

# 查看日志(应该显示清理信息)
# [main] 🧹 已清理 X 个屏蔽国家出口代理 (屏蔽: [CN])

# 查看 WebUI 的代理列表(不应该有 CN 开头的出口位置)

测试 2屏蔽多个国家

export BLOCKED_COUNTRIES=CN,RU,KP
go run .

# 使用测试脚本验证
./test/test_proxy.sh

# 观察输出的国旗 emoji不应该有 🇨🇳 🇷🇺 🇰🇵)

测试 3不屏蔽任何国家

export BLOCKED_COUNTRIES=
go run .

# 查看日志(不应该有清理信息)
# 代理列表中可能出现各种国家的代理

💡 最佳实践

  1. 默认配置:保持默认 BLOCKED_COUNTRIES=CN,适合大多数场景
  2. 生产环境:根据业务合规要求设置屏蔽国家
  3. 测试环境:可以设置为空(BLOCKED_COUNTRIES=)以获取更多代理
  4. 定期调整:根据代理质量和可用性调整屏蔽列表
  5. 配合筛选:利用 WebUI 的国家筛选器查看各国代理分布,辅助决策