Servidor HTTP
Un http.service posee un listener y aloja routers, endpoints y handlers de archivos estáticos.
Clasificación: referencia de configuración de servidor. Los bloques son fragmentos parciales de registro salvo que definan cada red, entorno, sistema de archivos, router, certificado, actor y entrada de política referenciados.
Configuración
- 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
| Campo | Tipo | Predeterminado | Descripción |
|---|---|---|---|
addr |
string | requerido | Dirección de escucha (:8080, 0.0.0.0:443) |
timeouts.read |
duration | - | Timeout de lectura de solicitud |
timeouts.write |
duration | - | Timeout de escritura de respuesta |
timeouts.idle |
duration | - | Timeout de conexión keep-alive |
host.buffer_size |
int | 1024 | Tamaño del buffer del relay de mensajes |
host.worker_count |
int | NumCPU | Workers del relay de mensajes |
network |
ID de Registro | - | Vincula el listener a través de una red superpuesta (p. ej., Tailscale o I2P) |
tls |
object | - | Terminación TLS (ver TLS) |
Timeouts
Configure timeouts para prevenir el agotamiento de recursos:
timeouts:
read: "10s" # Max time to read the entire request (headers + body)
write: "60s" # Max time to write response
idle: "120s" # Keep-alive timeout
read- Corto (5-10s) para APIs, mayor para uploadswrite- Debe coincidir con el tiempo esperado de generación de respuestaidle- Balance entre reutilización de conexiones y uso de recursos
30s, 1m, 2h15m. Use 0 para deshabilitar.
Configuración de Host
La sección host configura el relay interno de mensajes del servidor, usado por componentes como WebSocket relay:
host:
buffer_size: 2048
worker_count: 8
| Campo | Predeterminado | Descripción |
|---|---|---|
buffer_size |
1024 | Capacidad de cola de mensajes por worker |
worker_count |
NumCPU | Goroutines paralelas de procesamiento de mensajes |
Seguridad
Los servidores HTTP pueden tener un contexto de seguridad predeterminado aplicado mediante la configuración de lifecycle:
lifecycle:
auto_start: true
security:
actor:
id: "gateway-service"
policies:
- app:http_access_policy
Esto establece un actor y políticas de base para todas las solicitudes. Para las solicitudes autenticadas, el middleware token_auth sustituye el actor según el token validado, lo que permite políticas de seguridad por usuario.
Lifecycle
Los servidores son gestionados por el supervisor:
lifecycle:
auto_start: true
start_timeout: 30s
stop_timeout: 60s
requires:
- app:database
| Campo | Descripción |
|---|---|
auto_start |
Iniciar cuando arranca la aplicación |
start_timeout |
Tiempo máximo de espera para que el servidor inicie |
stop_timeout |
Tiempo máximo para el apagado ordenado |
requires |
Iniciar después de que estas entradas estén listas (depends_on es la forma heredada) |
Conectando Componentes
Los routers y handlers estáticos referencian al servidor via metadatos:
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
Múltiples Servidores
Ejecute servidores separados para distintos propósitos:
entries:
# Public API
- name: public
kind: http.service
addr: ":8080"
lifecycle:
auto_start: true
# Admin (localhost only)
- name: admin
kind: http.service
addr: "127.0.0.1:9090"
lifecycle:
auto_start: true
TLS
El servidor puede terminar TLS directamente. Configure tls.mode como manual (provea su propio certificado) o auto (certificado proporcionado por un driver de red overlay, ej. network.tailscale). Los listeners planos de clearnet no soportan auto. Omita tls o deje el mode vacío para ejecutar HTTP plano.
En modo auto el servidor no debe especificar cert/key — el driver de red los provee.
Certificado manual
Bajo mode: manual, cert y key llevan contenido PEM. Proporcione ese contenido de una de estas tres formas (elija una por campo, nunca las mezcle):
- PEM inline — el string PEM literal.
- Referencia
file://— ruta relativa al manifiesto, resuelta e incorporada en tiempo de carga (segura ante traversal). - Referencia al registro de entorno — obtiene el PEM de una variable de entorno registrada en tiempo de decodificación, usando un placeholder
${env:NAME}.
- 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:app.env:tls_cert}
key: ${env:app.env:tls_key}
El placeholder ${env:NAME} resuelve NAME a través del registro de entorno — el nombre público de una variable registrada o su ID de entrada (ej. app.env:tls_cert). No es una variable de entorno cruda del SO; un valor del SO solo es alcanzable cuando hay registrada una variable respaldada por env.storage.os con ese nombre. Puede darse un valor por defecto con ${env:NAME|default}.
cert_env / key_env siguen resolviéndose a través del registro de entorno de la misma forma, pero están obsoletos — prefiera el placeholder ${env:NAME} mostrado arriba.
| Campo | Descripción |
|---|---|
mode |
"" (off), auto, o manual |
cert / key |
Contenido PEM — inline, referencia file://, o placeholder ${env:NAME} |
Mutual TLS (mTLS)
Bajo mode: manual el servidor puede además verificar certificados de cliente:
tls:
mode: manual
cert: ${env:app.env:tls_cert}
key: ${env:app.env:tls_key}
client_ca: file://./certs/clients-ca.pem
client_auth: require_and_verify
client_ca acepta las mismas tres formas que cert/key (PEM inline, file://, o ${env:NAME}). El campo acompañante heredado client_ca_env también está obsoleto en favor de client_ca: ${env:NAME}.
| Campo | Descripción |
|---|---|
client_auth |
request, require_any, verify_if_given, require_and_verify |
client_ca |
Bundle PEM de CAs de cliente confiables (inline, file://, o ${env:NAME}) |
verify_if_given y require_and_verify requieren una CA. request y require_any aceptan cualquier certificado de cliente sin verificación de CA.
Véase también
- Enrutamiento - Routers y endpoints
- Archivos estáticos - Servicio de archivos estáticos
- Middleware - Middleware disponible
- Seguridad - Políticas de seguridad
- Relay WebSocket - Mensajería WebSocket