Zum Inhalt springen

HTTP-Server

Der HTTP-Server (http.service) lauscht auf einem Port und hostet Router, Endpunkte und statische Datei-Handler.

- 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
FeldTypStandardBeschreibung
addrstringerforderlichLausch-Adresse (:8080, 0.0.0.0:443)
timeouts.readduration-Request-Lese-Timeout
timeouts.writeduration-Response-Schreib-Timeout
timeouts.idleduration-Keep-Alive-Verbindungs-Timeout
host.buffer_sizeint1024Nachrichten-Relay-Puffergröße
host.worker_countintNumCPUNachrichten-Relay-Worker
networkRegistry-ID-Listener über ein Netzwerk-Overlay binden (z. B. Tailscale, I2P)
tlsobject-TLS-Terminierung (siehe TLS)

Konfigurieren Sie Timeouts um Ressourcenerschöpfung zu verhindern:

timeouts:
read: "10s" # Max Zeit zum Lesen von Request-Headern
write: "60s" # Max Zeit zum Schreiben der Response
idle: "120s" # Keep-Alive-Timeout
  • read - Kurz (5-10s) für APIs, länger für Uploads
  • write - Entsprechend der erwarteten Response-Generierungszeit anpassen
  • idle - Balance zwischen Verbindungswiederverwendung und Ressourcennutzung
Dauer-Format: 30s, 1m, 2h15m. 0 zum Deaktivieren verwenden.

Der host-Abschnitt konfiguriert das interne Nachrichten-Relay des Servers, das von Komponenten wie WebSocket-Relay verwendet wird:

host:
buffer_size: 2048
worker_count: 8
FeldStandardBeschreibung
buffer_size1024Nachrichtenwarteschlangen-Kapazität pro Worker
worker_countNumCPUParallele Nachrichtenverarbeitungs-Goroutinen
Erhöhen Sie diese Werte für Hochdurchsatz-WebSocket-Anwendungen. Das Nachrichten-Relay behandelt asynchrone Zustellung zwischen HTTP-Komponenten und Prozessen.

HTTP-Server können einen Standard-Sicherheitskontext über die Lebenszyklus-Konfiguration anwenden:

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

Dies setzt einen Basis-Actor und Richtlinien für alle Anfragen. Für authentifizierte Anfragen überschreibt die token_auth-Middleware den Actor basierend auf dem validierten Token, was benutzerspezifische Sicherheitsrichtlinien ermöglicht.

Server werden vom Supervisor verwaltet:

lifecycle:
auto_start: true
start_timeout: 30s
stop_timeout: 60s
depends_on:
- app:database
FeldBeschreibung
auto_startBeim Anwendungsstart starten
start_timeoutMax Wartezeit für Server-Start
stop_timeoutMax Zeit für kontrolliertes Herunterfahren
depends_onNach diesen Einträgen starten

Router und statische Handler referenzieren den Server über Metadaten:

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

Separate Server für verschiedene Zwecke betreiben:

entries:
# Öffentliche API
- name: public
kind: http.service
addr: ":8080"
lifecycle:
auto_start: true
# Admin (nur localhost)
- name: admin
kind: http.service
addr: "127.0.0.1:9090"
lifecycle:
auto_start: true

Der Server kann TLS direkt terminieren. Setzen Sie tls.mode auf manual (eigenes Zertifikat bereitstellen) oder auto (Zertifikat wird von einem Overlay-Netzwerktreiber bereitgestellt, z. B. network.tailscale). Reine Clearnet-Listener unterstützen auto nicht. Lassen Sie tls weg oder den Modus leer, um reines HTTP auszuführen.

Im auto-Modus darf der Server cert/key/cert_env/key_env nicht angeben — der Netzwerktreiber stellt sie bereit.

Stellen Sie Zertifikat und Schlüssel entweder inline/aus einer Datei oder über Umgebungsvariablen bereit (niemals beides):

- 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
FeldBeschreibung
mode"" (aus), auto oder manual
cert / keyPEM-Inhalt (typischerweise via file:// geladen)
cert_env / key_envNamen von Umgebungsvariablen, aufgelöst über die env-Registry

Unter mode: manual kann der Server zusätzlich Client-Zertifikate verifizieren:

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
FeldBeschreibung
client_authrequest, require_any, verify_if_given, require_and_verify
client_caPEM-Bundle vertrauenswürdiger Client-CAs
client_ca_envUmgebungsvariable mit dem CA-Bundle (gegenseitig ausschließend mit client_ca)

verify_if_given und require_and_verify benötigen eine CA. request und require_any akzeptieren jedes Client-Zertifikat ohne CA-Verifizierung.