先把当时的情况摆出来。同一份脚本在本地跑通,拷到海外机房的服务器上却一直 403,错误体是 forbidden,提示当前区域不可用,机器在亚太某区,出口经过云厂商的 NAT 网关。

这类报错背后常见的原因有几处,逐个排除就行。账号所在区域与服务出口区域不一致,被风控标记。也可能是机房 IP 落在不支持的国家或地区段。

还有一种情况,走了云厂商的共享出口,被识别成高风险来源。另外,代理只对部分域名生效,API 请求走了直连。

先查出口 IP 的实际归属

curl -sS https://ipinfo.io/json | jq -r '.ip,.country,.org'

接着确认请求确实走了代理

curl -sS -x http://127.0.0.1:1080 https://api.anthropic.com/v1/models -H "x-api-key: $ANTHROPIC_API_KEY" -H "anthropic-version: 2023-06-01" -o /dev/null -w '%{http_code}\n'

等前面都确认过,再把代理写进进程环境再跑脚本

python -c "import os;os.environ['HTTPS_PROXY']='http://127.0.0.1:1080';import anthropic;print(anthropic.Anthropic().models.list())"

怎么算真的好了,看的是同一批现象。服务端脚本与本地脚本返回一致,模型列表能正常拉到,403 不再出现且出口 IP 落在支持区域。

补一句。改 IP 只能绕开表象,账号注册地与实际使用地长期不一致仍有被封风险,把部署位置和账号区域对齐更稳。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189