OpenAI API reverse proxy и base url: шлюз или обычный прокси
Прежде чем строить шлюз для OpenAI API, проверьте, не хватит ли обычного прокси. Здесь — сравнение и то, чего стоит каждый вариант.
Два подхода, которые путают
Обычный (прямой) прокси: SDK получает URL прокси и по-прежнему подключается к api.openai.com, а соединение идёт туннелем через прокси. Вы меняете HTTP-клиент, а не адрес. В нашем руководстве по прокси для OpenAI API есть настройки для Python и Node.
Обратный прокси, или шлюз: вы запускаете сервер по своему адресу, например https://llm-gw.example.com/v1. SDK получает этот адрес как base_url (в README Python SDK упомянута и переменная окружения OPENAI_BASE_URL), а шлюз передаёт каждый запрос в OpenAI.
OpenAI сообщает, что использование сервисов в странах и на территориях вне списка поддерживаемых может привести к блокировке или приостановке аккаунта, а API отвечает 403 «Country, region, or territory not supported», когда видит вызов оттуда. Шлюз — не способ это обойти: машина, которая фактически обращается к OpenAI, должна быть в поддерживаемой стране, как и вы сами.
Никогда не отправляйте API-ключ на шлюз, которым вы не управляете и которому не доверяете. Тот, кто его держит, видит ключ и каждый промпт и ответ. Сайты с «бесплатным прокси для ChatGPT API» — как раз такой случай.
Если нужно лишь «серверу нужен постоянный исходящий IP», берите обычный прокси и на этом остановитесь. Если «нужны единые ключи и журналы», продолжайте.
Шаг 2: для обычного прокси
Закажите IP в стране, которую поддерживает OpenAI, задайте его в HTTP-клиенте (код ниже и руководство по прокси для OpenAI API) и сначала проверьте через curl.
Запустите шлюз на сервере в поддерживаемой стране за TLS. Настройте его для потоковой выдачи: без буферизации ответа и с таймаутом чтения больше вашей самой долгой паузы.
Шаг 4: направьте клиентов на него
Задайте base_url (в Node — baseURL) с адресом шлюза, включая /v1. Настоящий ключ OpenAI по возможности держите на шлюзе, а сервисам выдайте их собственные ключи шлюза.
Шаг 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
}
}
Только пример. Директивы взяты из документации модуля proxy 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 } });
Только пример. fetch из undici нужно использовать в паре с его ProxyAgent, как описано в документации SDK.
Симптомы и решения
403 Country, region, or territory not supported
Проверьте OpenAI видит вызов из неподдерживаемой страны. При шлюзе это IP сервера-шлюза, при прокси — 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, дата-центровый IP Proxy302 — более лёгкий вариант: HTTP или SOCKS5 выбирается для каждого IP при покупке, данные выдаются в «Мои активы» в виде хоста, порта, логина и пароля. Дата-центровый IP стоит $0,25 за день и $3,99 за 30 дней, одинаково во всех странах; список стран ограничен и виден на странице заказа. Автопродление необязательное, его можно выключить в «Мои активы». Бесплатного пробного периода нет, минимальная покупка — один IP на один день.
Прокси не меняет условия OpenAI. Пользуйтесь API из поддерживаемой страны и не отдавайте ключи сторонним шлюзам.
Россия не входит в список стран OpenAI API. Фиксированный дата-центровый IP в поддерживаемой стране: прокси в Python или Node SDK и постоянный адрес для белого списка IP.
Что такое прокси MCP-сервер, чем отличаются локальные и удалённые MCP-серверы, как установить его в Claude Code, Codex CLI и Cursor и как направить собственный трафик сервера через прокси.
Файл фактов о продуктах сайта (значения сверены с консолью, бэкендом и прайсом 18-19 октября 2026): цены в долларах (1 PTC = $1), сроки аренды, протоколы и порты, бесплатного пробного периода нет.
Прочитано 15 ноября 2026: клиент принимает base_url, в README упомянута переменная окружения OPENAI_BASE_URL; HTTP-клиент можно заменить, например DefaultHttpx2Client(proxy="http://...").
Прочитано 15 ноября 2026: у клиента есть параметр baseURL; прокси задаётся через fetchOptions, в Node — dispatcher из ProxyAgent библиотеки undici, в паре с соответствующей реализацией fetch.
Прочитано 15 ноября 2026: proxy_pass задаёт протокол и адрес проксируемого сервера (http или https); proxy_buffering по умолчанию включён, при выключении ответ передаётся клиенту по мере получения; proxy_read_timeout по умолчанию 60s между двумя последовательными чтениями; proxy_ssl_server_name (по умолчанию off) передаёт имя сервера через SNI на целевой HTTPS-сервер.
Прочитано 15 ноября 2026: 403 «Country, region, or territory not supported» означает обращение к API из неподдерживаемой страны, региона или территории; 401 — неверный или неправильный API-ключ.
Прочитано 15 ноября 2026: использование сервисов в странах и на территориях вне списка поддерживаемых может привести к блокировке или приостановке аккаунта.
Готовы попробовать?
Создайте аккаунт, пополните баланс и выберите ротируемый резидентный, статический ISP или дата-центр IP — настроить его в браузере можно за несколько минут.