Этот прокси-сервер предназначен для перенаправления HTTP-запросов от клиентов к целевому LLM сервису. Он реализует функции обратного прокси с дополнительной обработкой заголовков и логированием запросов.
Find a file
2025-12-24 13:51:27 +03:00
.gitignore начальный коммит 2025-12-24 13:51:27 +03:00
go.mod начальный коммит 2025-12-24 13:51:27 +03:00
handler.go начальный коммит 2025-12-24 13:51:27 +03:00
main.go начальный коммит 2025-12-24 13:51:27 +03:00
Makefile начальный коммит 2025-12-24 13:51:27 +03:00
proxy.go начальный коммит 2025-12-24 13:51:27 +03:00
README.md начальный коммит 2025-12-24 13:51:27 +03:00

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