Перейти к содержимому

HTTP-сервер

HTTP-сервер (http.service) слушает порт и обслуживает роутеры, эндпоинты и обработчики статических файлов.

- name: gateway
kind: http.service
addr: ":8080"
timeouts:
read: "5s"
write: "30s"
idle: "60s"
host:
buffer_size: 1024
worker_count: 4
lifecycle:
auto_start: true
security:
actor:
id: "http-gateway"
policies:
- app:http_policy
ПолеТипПо умолчаниюОписание
addrstringобязательноАдрес прослушивания (:8080, 0.0.0.0:443)
timeouts.readduration-Таймаут чтения запроса
timeouts.writeduration-Таймаут записи ответа
timeouts.idleduration-Таймаут keep-alive соединения
host.buffer_sizeint1024Размер буфера relay сообщений
host.worker_countintNumCPUВоркеры relay сообщений
networkRegistry ID-Привязка listener через network overlay (напр. Tailscale, I2P)
tlsobject-TLS-терминация (см. TLS)

Настройте таймауты для предотвращения истощения ресурсов:

timeouts:
read: "10s" # Макс. время чтения заголовков запроса
write: "60s" # Макс. время записи ответа
idle: "120s" # Таймаут keep-alive
  • read — короткий (5-10с) для API, больше для загрузок
  • write — соответствует ожидаемому времени генерации ответа
  • idle — баланс между переиспользованием соединений и потреблением ресурсов
Формат duration: 30s, 1m, 2h15m. Используйте 0 для отключения.

Секция host настраивает внутренний relay сообщений сервера, используемый такими компонентами, как WebSocket relay:

host:
buffer_size: 2048
worker_count: 8
ПолеПо умолчаниюОписание
buffer_size1024Ёмкость очереди сообщений на воркер
worker_countNumCPUПараллельные goroutine обработки сообщений
Увеличьте эти значения для WebSocket-приложений с высокой пропускной способностью. Relay сообщений обеспечивает асинхронную доставку между HTTP-компонентами и процессами.

HTTP-серверы могут иметь контекст безопасности по умолчанию, применяемый через конфигурацию lifecycle:

lifecycle:
auto_start: true
security:
actor:
id: "gateway-service"
policies:
- app:http_access_policy

Это устанавливает базового актёра и политики для всех запросов. Для аутентифицированных запросов middleware token_auth переопределяет актёра на основе валидированного токена, что позволяет применять политики безопасности на уровне пользователя.

Серверы управляются supervisor’ом:

lifecycle:
auto_start: true
start_timeout: 30s
stop_timeout: 60s
depends_on:
- app:database
ПолеОписание
auto_startЗапуск при старте приложения
start_timeoutМакс. время ожидания запуска сервера
stop_timeoutМакс. время graceful-остановки
depends_onЗапуск после готовности этих записей

Роутеры и статические обработчики ссылаются на сервер через metadata:

entries:
- name: gateway
kind: http.service
addr: ":8080"
- name: api
kind: http.router
meta:
server: gateway
prefix: /api
- name: static
kind: http.static
meta:
server: gateway
path: /
fs: app:public

Запускайте отдельные серверы для разных целей:

entries:
# Публичное API
- name: public
kind: http.service
addr: ":8080"
lifecycle:
auto_start: true
# Админка (только localhost)
- name: admin
kind: http.service
addr: "127.0.0.1:9090"
lifecycle:
auto_start: true

Сервер может сам терминировать TLS. Установите tls.mode в manual (вы предоставляете свой сертификат) или auto (сертификат предоставляется драйвером overlay-сети, напр. network.tailscale). Обычные clearnet-listener’ы не поддерживают auto. Опустите tls или оставьте mode пустым для работы по обычному HTTP.

В режиме auto сервер не должен указывать cert/key/cert_env/key_env — их предоставляет сетевой драйвер.

Предоставьте cert и key либо inline/файлом, либо через переменные окружения (никогда одновременно):

- name: api
kind: http.service
addr: ":443"
tls:
mode: manual
cert: file://./certs/server.pem
key: file://./certs/server.key
- name: api
kind: http.service
addr: ":443"
tls:
mode: manual
cert_env: TLS_SERVER_CERT
key_env: TLS_SERVER_KEY
ПолеОписание
mode"" (выключено), auto или manual
cert / keyСодержимое PEM (обычно загружается через file://)
cert_env / key_envИмена переменных окружения, разрешаемые через env registry

В mode: manual сервер может дополнительно проверять клиентские сертификаты:

tls:
mode: manual
cert_env: TLS_SERVER_CERT
key_env: TLS_SERVER_KEY
client_ca: file://./certs/clients-ca.pem
client_auth: require_and_verify
ПолеОписание
client_authrequest, require_any, verify_if_given, require_and_verify
client_caPEM-bundle доверенных клиентских CA
client_ca_envПеременная окружения с CA-bundle (взаимоисключающа с client_ca)

verify_if_given и require_and_verify требуют CA. request и require_any принимают любой клиентский сертификат без проверки CA.