403 Country, region, or territory not supported
检查 OpenAI 看到调用来自不受支持的国家。用网关时是网关服务器的 IP,用代理时是代理的出口。
处理 在同一台机器上用 https://ipinfo.io/json 查出口,把网关挪走,或选一个受支持国家的出口。
停止条件 不要从同一个地址反复重试。
在为 OpenAI API 搭网关之前,先看看普通代理是不是已经够用。本文对比两者,并说明各自的代价。
普通(正向)代理:给 SDK 配一个代理 URL,它仍然连接 api.openai.com,只是连接经由代理隧道转发。改的是 HTTP 客户端,不是地址。我们的 OpenAI API 代理指南里有 Python 和 Node 的写法。
反向代理或网关:你在自己的地址上运行一台服务器,比如 https://llm-gw.example.com/v1。给 SDK 设 base_url 为这个地址(Python SDK 的 README 还提到了 OPENAI_BASE_URL 环境变量),网关再把每个请求转给 OpenAI。
| 项目 | 普通代理 | 带 base_url 的网关 |
|---|---|---|
| 你想要什么 | 服务器调用时有稳定、已知的出口 IP | 集中管理密钥、日志、限流,或服务多个应用 |
| 客户端要改什么 | HTTP 客户端加一个代理设置 | base_url 指向你的服务器 |
| 请求从哪里到达 OpenAI | 代理的出口 IP | 网关服务器的 IP |
| 你要自己运行什么 | 除代理账号外什么都不用 | 一台带 TLS 的服务器,还要更新和监控 |
| 经过的内容 | 发往 api.openai.com 的加密流量 | 你的 API 密钥和每条提示词,在网关上是明文 |
我们根据 OpenAI SDK 的 README 和 nginx 文档整理,2026 年 11 月 15 日阅读。按你要解决的问题选,别按哪个听起来更高级来选。
OpenAI 表示,在不在其支持名单上的国家或地区使用其服务,账号可能被封禁或停用;API 看到来自这些地方的调用时,会返回 403「Country, region, or territory not supported」。网关不是绕开这一点的办法:真正调用 OpenAI 的那台机器必须位于受支持的国家,你本人也一样。
不要把 API 密钥发给你不运行或不信任的网关。运营它的人能看到密钥以及每条提示词和回答。那些「免费 ChatGPT API 代理」网站就属于这种情况。
如果只是「我的服务器要一个固定的出口 IP」,用普通代理,到此为止。如果是「我要集中管理密钥和日志」,继续往下。
订购一个 OpenAI 支持国家的 IP,设到 HTTP 客户端上(见下面的代码和 OpenAI API 代理指南),先用 curl 测通。
把网关跑在支持国家的服务器上,前面加 TLS。为流式输出做好配置:不缓冲响应,读取超时要大于你最长的停顿。
把 base_url(Node 里是 baseURL)设成网关地址,要带 /v1。尽量把真正的 OpenAI 密钥留在网关上,给各服务发它们自己的网关密钥。
开启 stream 调用一个模型,确认数据块是边生成边到达的。再看看错误的密钥和不存在的路径各返回什么。
# Your own gateway, in a country OpenAI supports (nginx)
server {
listen 443 ssl;
server_name llm-gw.example.com;
# ssl_certificate and ssl_certificate_key go here
location /v1/ {
proxy_pass https://api.openai.com; # no URI part: /v1/... is passed on unchanged
proxy_ssl_server_name on; # send the server name (SNI) to the HTTPS target server
proxy_buffering off; # pass streamed chunks on as they arrive
proxy_read_timeout 300s; # default is 60s between two reads
}
}
仅为示例。指令来自 nginx 代理模块文档;上线前请加上证书、访问控制和日志。
from openai import OpenAI, DefaultHttpx2Client
# A) Gateway: the client talks to YOUR URL; the gateway talks to api.openai.com
gateway = OpenAI(base_url="https://llm-gw.example.com/v1") # or set OPENAI_BASE_URL
# B) Plain proxy: the client still talks to api.openai.com, through a proxy
plain = OpenAI(http_client=DefaultHttpx2Client(proxy="http://USERNAME:PASSWORD@HOST:PORT"))
仅为示例。把地址和代理信息换成你自己的。
// npm install openai undici
import OpenAI from 'openai';
import { fetch, ProxyAgent } from 'undici';
// A) Gateway
const gateway = new OpenAI({ baseURL: 'https://llm-gw.example.com/v1' });
// B) Plain proxy
const dispatcher = new ProxyAgent('http://USERNAME:PASSWORD@HOST:PORT');
const plain = new OpenAI({ fetch, fetchOptions: { dispatcher } });
仅为示例。undici 的 fetch 必须和它的 ProxyAgent 配套使用,SDK 文档就是这样写的。
检查 OpenAI 看到调用来自不受支持的国家。用网关时是网关服务器的 IP,用代理时是代理的出口。
处理 在同一台机器上用 https://ipinfo.io/json 查出口,把网关挪走,或选一个受支持国家的出口。
停止条件 不要从同一个地址反复重试。
检查 密钥在途中丢了或被换了:网关没有把 Authorization 头传下去,或者两把密钥弄混了。
处理 查看网关发给 OpenAI 的内容,和直接用 curl 调用的结果对比。
停止条件 如果密钥经过了你不信任的网关,就吊销它。
检查 base_url 少了 /v1,或者网关对路径的映射不一样。
处理 用 curl 访问网关的 /v1/models,和 api.openai.com 对比。
停止条件 先把路径映射改对,再从代码里测试。
检查 网关缓冲了响应,或它的读取超时短于你最长的停顿。nginx 默认缓冲,并在两次读取之间等 60 秒。
处理 在网关上关闭缓冲,并调大读取超时。
停止条件 直连也有同样问题的话,原因在别处。
对需要稳定出口 IP 的服务器调用,Proxy302 的机房 IP 是更轻的选择:购买时按每个 IP 选 HTTP 或 SOCKS5,在「我的资产」里以主机、端口、账号、密码的形式发放。机房 IP 一天 US$0.25,30 天 US$3.99,所有国家价格相同,可选国家有限,以下单页显示为准。自动续费是可选的,可以在「我的资产」里关闭。没有免费试用,最小购买单位是一个 IP 一天。
代理不会改变 OpenAI 的条款。请在受支持的国家使用 API,也不要把密钥交给第三方网关。
你自己的一台服务器,在你的网址上接收请求,再转发给 api.openai.com。客户端通过设置 base_url 来使用它。
不用。普通代理设在 HTTP 客户端上,客户端仍然访问 api.openai.com。
不可以。调用是从网关的 IP 到达 OpenAI 的,OpenAI 对不受支持的国家返回 403,并且可能封禁在这些地方使用其服务的账号。
nginx 默认缓冲响应,并在两次读取之间等 60 秒。给流式的 location 关闭缓冲,并调大 proxy_read_timeout。
产品观察 · 确认日期:
站点的产品信息文件(数值于 2026 年 10 月 18-19 日对照控制台、后端和价格表核对):以美元计价(1 PTC = 1 美元)、租期、协议和端口、没有免费试用。
官方文档 · 确认日期:
2026 年 11 月 15 日阅读:客户端可传 base_url,README 提到 OPENAI_BASE_URL 环境变量;HTTP 客户端可以覆盖,例如 DefaultHttpx2Client(proxy="http://...")。
官方文档 · 确认日期:
2026 年 11 月 15 日阅读:客户端有 baseURL 选项;代理通过 fetchOptions 设置,在 Node 里是 undici 的 ProxyAgent 做 dispatcher,并且要与对应的 fetch 实现配套。
官方文档 · 确认日期:
2026 年 11 月 15 日阅读:proxy_pass 设置被代理服务器的协议和地址(http 或 https);proxy_buffering 默认开启,关闭后响应一收到就传给客户端;proxy_read_timeout 默认 60s,指两次连续读取之间的间隔;proxy_ssl_server_name 默认 off,开启后在连接 HTTPS 目标服务器时用 SNI 传送服务器名。
官方文档 · 确认日期:
2026 年 11 月 15 日阅读:403「Country, region, or territory not supported」表示从不受支持的国家、地区或领地访问 API;401 表示 API 密钥无效或不正确。
官方文档 · 确认日期:
2026 年 11 月 15 日阅读:在不在支持名单上的国家或地区使用服务,账号可能被封禁或停用。
注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。