EQProxy 0.9.1 — proxy inverso y balanceador de carga
EQProxy es un proxy inverso y balanceador de carga escrito en Rust que importa la configuración que ya tienes (nginx, HAProxy, ingress-nginx, Envoy), la traduce a un único eqproxy.toml y clasifica cada directiva del origen como convertida, a revisar o rechazada.
Estado: v0.9.1, pre-1.0. No se declara listo para producción y todavía no tiene usuarios fuera del autor: pruébalo primero sobre una configuración de staging.
Qué es y para qué se usa
Su caso de uso es la sustitución de un proxy existente sin reescribir la configuración a mano. eqproxy config import lee el fichero del proxy de origen, escribe el eqproxy.toml equivalente y genera un informe que nombra cada directiva que no se ha podido traducir. La regla del proyecto es explícita: una traducción a medias en silencio es peor que un rechazo.
El resultado es un único binario estático (Linux, musl) que termina TLS, enruta por host, ruta, método, cabecera, cookie, IP y mapas de datos, balancea entre servidores con pesos, comprueba su salud y se recarga en caliente sin reiniciar el proceso.
Arquitectura
El producto son cuatro crates: eqproxy-core (métricas, motor de reglas, apagado), eqproxy-config (parser TOML tipado, validación semántica, conversores), eqproxy-net (dataplane: listeners, TLS, salud, caché, plano de administración) y eqproxy-cli (el binario eqproxy). La pila de red es tokio + rustls, un parser de HTTP/1.1 propio y estricto, la crate h2 para HTTP/2 y quinn + h3 para HTTP/3; no hay hyper, de modo que el dataplane reenvía exactamente los bytes que validó y rechaza cualquier framing con dos lecturas posibles (ADR-0036). Todo el código es Rust seguro: forbid(unsafe_code) en la raíz de cada crate.
La configuración se parsea, se valida y se resuelve —certificados, direcciones, balanceo— antes de que el dataplane la adopte, y el cambio se aplica como un snapshot atómico: no hay proceso maestro ni plano de control. Un único escritor serializa las recargas por SIGHUP y las escrituras de la API de administración; el plano de administración vive en su propio socket y su propia tarea, así que el dataplane sigue sirviendo aunque ese plano esté caído o no se haya configurado.
Características principales
- Reglas de enrutamiento tipadas por listener: host, path, método, cabecera, cookie, mapa e IP; gana la primera que coincide.
- Cuatro acciones por regla:
use_backend,split(canario ponderado,weight = 0para revertir, fijación por hash, espejo),redirectydirect_response. - TLS, mTLS y SNI con varios certificados; HTTP/2 terminado y HTTP/2 hacia el backend; HTTP/3 sobre QUIC (experimental).
- gRPC, WebSocket y
CONNECT; compresión gzip y Brotli. - Caché de respuestas por listener, con
Vary, revalidaciónETag/304y bloqueo por clave. - Comprobaciones de salud TCP y HTTP, detección pasiva, reintentos seguros, colas acotadas y failover con escalones
priorityy pools de respaldo. - Recarga en caliente de configuración y de secretos TLS sin plano de control.
- API de administración con roles de lectura y escritura, auditoría y panel web renderizado en servidor, sin JavaScript.
- Métricas Prometheus de cardinalidad acotada (opt-in el detalle por servidor y por ruta).
- Filtros de petición en WASM con combustible, plazo y memoria acotados.
Instalación en cinco líneas
curl -sSLO https://github.com/EQProxy/EQProxy/releases/download/v0.9.1/eqproxy-linux-amd64
curl -sSLO https://github.com/EQProxy/EQProxy/releases/download/v0.9.1/SHA256SUMS.txt
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
chmod +x eqproxy-linux-amd64
./eqproxy-linux-amd64 --version
La imagen Docker equivalente es ghcr.io/exyonq/eqproxy:0.9.1 (mismos digests en exyonq/eqproxy:0.9.1). Detalle en Instalación.
Documentación
| Página | Contenido |
|---|---|
| Instalación | Binarios, compilación, imágenes Docker, requisitos, primer arranque y validación |
| Configuración | Referencia de eqproxy.toml sección a sección, con defectos y ejemplos |
| Conversores | Qué se convierte y qué no desde nginx, HAProxy, ingress-nginx y Envoy |
| API de administración | Endpoints, roles, auditoría y ejemplos con curl |
| Operación | Salud, métricas, recarga en caliente, logs, señales y checklist |
| Paridad | Matriz de 120 filas, lagunas conocidas y cómo se genera la evidencia |
| Ejemplos | Recetario: TLS, least-conn, límites, caché, rate limit y Docker Compose |
EQProxy no anuncia compatibilidad: anuncia casos demostrados. La matriz de paridad clasifica las 120 filas de referencia y la evidencia se publica con cada número.