跳到正文

OpenAI API 反向代理与 base url 怎么选

在为 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 代理」网站就属于这种情况。

怎么做

  1. 第 1 步:先说清你的问题

    如果只是「我的服务器要一个固定的出口 IP」,用普通代理,到此为止。如果是「我要集中管理密钥和日志」,继续往下。

  2. 第 2 步:普通代理

    订购一个 OpenAI 支持国家的 IP,设到 HTTP 客户端上(见下面的代码和 OpenAI API 代理指南),先用 curl 测通。

  3. 第 3 步:网关

    把网关跑在支持国家的服务器上,前面加 TLS。为流式输出做好配置:不缓冲响应,读取超时要大于你最长的停顿。

  4. 第 4 步:把客户端指向它

    把 base_url(Node 里是 baseURL)设成网关地址,要带 /v1。尽量把真正的 OpenAI 密钥留在网关上,给各服务发它们自己的网关密钥。

  5. 第 5 步:测流式和报错

    开启 stream 调用一个模型,确认数据块是边生成边到达的。再看看错误的密钥和不存在的路径各返回什么。

最小的 nginx 网关

# 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 代理模块文档;上线前请加上证书、访问控制和日志。

Python:网关与普通代理

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"))

仅为示例。把地址和代理信息换成你自己的。

Node:网关与普通代理

// 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 文档就是这样写的。

症状与处理

403 Country, region, or territory not supported

检查 OpenAI 看到调用来自不受支持的国家。用网关时是网关服务器的 IP,用代理时是代理的出口。

处理 在同一台机器上用 https://ipinfo.io/json 查出口,把网关挪走,或选一个受支持国家的出口。

停止条件 不要从同一个地址反复重试。

401 Incorrect API key

检查 密钥在途中丢了或被换了:网关没有把 Authorization 头传下去,或者两把密钥弄混了。

处理 查看网关发给 OpenAI 的内容,和直接用 curl 调用的结果对比。

停止条件 如果密钥经过了你不信任的网关,就吊销它。

所有路径都 404

检查 base_url 少了 /v1,或者网关对路径的映射不一样。

处理 用 curl 访问网关的 /v1/models,和 api.openai.com 对比。

停止条件 先把路径映射改对,再从代码里测试。

流式输出一次性到达,或一分钟左右后中断

检查 网关缓冲了响应,或它的读取超时短于你最长的停顿。nginx 默认缓冲,并在两次读取之间等 60 秒。

处理 在网关上关闭缓冲,并调大读取超时。

停止条件 直连也有同样问题的话,原因在别处。

普通代理场景用 Proxy302

对需要稳定出口 IP 的服务器调用,Proxy302 的机房 IP 是更轻的选择:购买时按每个 IP 选 HTTP 或 SOCKS5,在「我的资产」里以主机、端口、账号、密码的形式发放。机房 IP 一天 US$0.25,30 天 US$3.99,所有国家价格相同,可选国家有限,以下单页显示为准。自动续费是可选的,可以在「我的资产」里关闭。没有免费试用,最小购买单位是一个 IP 一天。

代理不会改变 OpenAI 的条款。请在受支持的国家使用 API,也不要把密钥交给第三方网关。

常见问题

什么是 OpenAI API 反向代理?

你自己的一台服务器,在你的网址上接收请求,再转发给 api.openai.com。客户端通过设置 base_url 来使用它。

给 OpenAI API 用代理,一定要搭反向代理吗?

不用。普通代理设在 HTTP 客户端上,客户端仍然访问 api.openai.com。

网关可以放在任何国家吗?

不可以。调用是从网关的 IP 到达 OpenAI 的,OpenAI 对不受支持的国家返回 403,并且可能封禁在这些地方使用其服务的账号。

用公开的「ChatGPT 代理」网站安全吗?

不要把密钥发给你不能控制的网关:运营者能看到密钥和你所有的提示词。

为什么流式输出在 nginx 后面卡住?

nginx 默认缓冲响应,并在两次读取之间等 60 秒。给流式的 location 关闭缓冲,并调大 proxy_read_timeout。

参考资料

6
  1. Proxy302 产品信息与价格表

    产品观察 · 确认日期:

    站点的产品信息文件(数值于 2026 年 10 月 18-19 日对照控制台、后端和价格表核对):以美元计价(1 PTC = 1 美元)、租期、协议和端口、没有免费试用。

  2. openai-python README(GitHub)

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:客户端可传 base_url,README 提到 OPENAI_BASE_URL 环境变量;HTTP 客户端可以覆盖,例如 DefaultHttpx2Client(proxy="http://...")。

  3. openai-node README(GitHub)

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:客户端有 baseURL 选项;代理通过 fetchOptions 设置,在 Node 里是 undici 的 ProxyAgent 做 dispatcher,并且要与对应的 fetch 实现配套。

  4. nginx 文档:ngx_http_proxy_module

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:proxy_pass 设置被代理服务器的协议和地址(http 或 https);proxy_buffering 默认开启,关闭后响应一收到就传给客户端;proxy_read_timeout 默认 60s,指两次连续读取之间的间隔;proxy_ssl_server_name 默认 off,开启后在连接 HTTPS 目标服务器时用 SNI 传送服务器名。

  5. OpenAI API:错误码

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:403「Country, region, or territory not supported」表示从不受支持的国家、地区或领地访问 API;401 表示 API 密钥无效或不正确。

  6. OpenAI API:支持的国家和地区

    官方文档 · 确认日期:

    2026 年 11 月 15 日阅读:在不在支持名单上的国家或地区使用服务,账号可能被封禁或停用。

准备好试试了吗?

注册账号、充值一次,就能选动态住宅、静态 ISP 或数据中心 IP,几分钟配进你的浏览器。