раздел 03
Как организовать на практике
Соберём всё в рабочую схему: зарубежный VPS с forward-прокси, доступ к нему по whitelist и приложение на российском сервере, которое ходит к API через этот прокси. Все адреса, порты и логины ниже - плейсхолдеры. Подставляйте свои значения.
Шаг 1. Зарубежный VPS
Возьмите самый недорогой инстанс у зарубежного провайдера. Запросы к LLM API нетяжёлые, мощный сервер не нужен. Пошагово про создание сервера - в гайде про DigitalOcean.
Запишите публичный IP этого VPS - его вы будете указывать приложению как адрес прокси. В примерах ниже это 203.0.113.10.
Шаг 2. Forward-прокси с доступом по whitelist
Поставьте на VPS прокси-софт. Два рабочих варианта - tinyproxy (лёгкий, простой конфиг) и squid (мощнее, больше возможностей). Для задачи "пропустить запросы к API" хватает tinyproxy.
Минимальный конфиг tinyproxy выглядит примерно так (плейсхолдеры - замените на своё):
# tinyproxy.conf - пример с плейсхолдерами
Port 3128
Listen 0.0.0.0
# доступ только с IP вашего российского сервера
Allow YOUR_RF_SERVER_IP
# не открывать прокси всему интернету:
# никаких Allow 0.0.0.0/0 и публичных диапазонов
Ключевой момент - директива Allow. В ней указывается только IP вашего российского сервера, которому разрешено пользоваться прокси. Всем остальным доступ закрыт. Если прокси без whitelist - его быстро найдут и начнут гонять через него чужой трафик.
После правки конфига перезапустите сервис и проверьте, что порт слушается и доступен только с вашего адреса.
Шаг 3. Подключить приложение
На российском сервере (например, на Selectel) направьте трафик приложения через прокси. Самый универсальный способ - переменные окружения HTTP_PROXY и HTTPS_PROXY. Большинство HTTP-клиентов и SDK читают их автоматически.
# .env или окружение процесса - плейсхолдеры
HTTP_PROXY=http://203.0.113.10:3128
HTTPS_PROXY=http://203.0.113.10:3128
# если без аутентификации - так; с логином/паролем формат:
# HTTPS_PROXY=http://USER:PASSWORD@203.0.113.10:3128
Если клиент не подхватывает переменные окружения, прокси задают прямо в SDK. Например, для Node-клиента это обычно отдельный параметр транспорта или http-агент:
// псевдокод - смысл, а не точный API конкретного SDK
const client = new SomeLLMClient({
apiKey: process.env.LLM_API_KEY,
httpAgent: makeProxyAgent("http://203.0.113.10:3128"),
});
После настройки сделайте один тестовый запрос к API и убедитесь, что ответ приходит. Если до этого запрос блокировался по IP, а теперь проходит - прокси работает.