| .gitignore | ||
| go.mod | ||
| handler.go | ||
| main.go | ||
| Makefile | ||
| proxy.go | ||
| README.md | ||
LLM Proxy
Прокси-сервер для маршрутизации запросов к LLM сервисам.
Описание
Этот прокси-сервер предназначен для перенаправления HTTP-запросов от клиентов к целевому LLM сервису. Он реализует функции обратного прокси с дополнительной обработкой заголовков и логированием запросов.
Главное назначение — обход ошибок TLS для Kilo Code.
Основные функции
- Обратное проксирование запросов к целевому сервису
- Опциональное добавление CORS-заголовков для поддержки кросс-доменных запросов
- Логирование всех входящих и исходящих запросов (без тела запросов)
- Поддержка streaming-ответов (SSE)
- Настройка таймаутов и параметров соединения
Архитектура
Проект состоит из следующих компонентов:
main.go- основная точка входа, настройка сервера и проксиhandler.go- обработчик HTTP-запросов с логированиемproxy.go- логика проксирования, модификация запросов и ответов
Конфигурация
Сервер принимает следующие параметры командной строки:
-listen- адрес и порт для прослушивания (по умолчанию:8888)-target- целевой URL для проксирования-cors- флаг для включения CORS-заголовков (по умолчаниюfalse)
Особенности реализации
- Прокси определяет streaming-запросы по наличию
/completionsв пути URL - Для streaming-ответов устанавливаются специальные заголовки:
Content-Type: text-event-stream,Cache-Control: no-cache,Connection: keep-alive - Все запросы и ответы логируются с указанием метода, пути и времени выполнения, но без тела запросов
- CORS-заголовки добавляются только при включении флага
-cors - Пропускается проверка SSL-сертификатов целевого сервиса (
InsecureSkipVerify: true)
Запуск
go run main.go -listen :8888 -target адрес_БЯМ -cors
Сборка
Для сборки проекта выполните команду:
go build -o llmproxy main.go
После сборки бинарный файл llmproxy можно переместить в директорию
~/.local/bin/ или другую директорию из переменной PATH:
mv llmproxy ~/.local/bin/
Настройка systemd сервиса
Запуск от root
Для запуска прокси-сервера как системного сервиса используется файл
llmproxy.service. Скопируйте его в директорию /etc/systemd/system/:
sudo cp llmproxy.service /etc/systemd/system/
Или создайте симлинк:
sudo ln -s $(pwd)/llmproxy.service /etc/systemd/system/llmproxy.service
Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reexec
Или:
sudo systemctl daemon-reload
Запустите сервис:
sudo systemctl start llmproxy
Настройте автозапуск при загрузке:
sudo systemctl enable llmproxy
Проверьте статус сервиса:
sudo systemctl status llmproxy
Запуск от пользователя
Для запуска сервиса от имени пользователя создайте директорию для пользовательских сервисов:
mkdir -p ~/.config/systemd/user
Скопируйте файл сервиса в директорию пользовательских сервисов:
cp llmproxy.service ~/.config/systemd/user/
Перезагрузите конфигурацию systemd для пользователя:
systemctl --user daemon-reexec
Или:
systemctl --user daemon-reload
Запустите сервис:
systemctl --user start llmproxy
Настройте автозапуск при загрузке:
systemctl --user enable llmproxy
Проверьте статус сервиса:
systemctl --user status llmproxy
Для автоматического запуска пользовательских сервисов при загрузке системы может потребоваться включить linger:
sudo loginctl enable-linger $USER
Зависимости
- Go 1.25
- Стандартная библиотека Go