Reproxy es un servidor HTTP Edge / Proxy inverso simple que admite varios proveedores (Docker, Static, File). Uno o más proveedores proporcionan información sobre el servidor solicitado, la URL solicitada, la URL de destino y la URL para la comprobación de integridad. Se distribuye como un solo archivo binario o como un contenedor Docker.
- Terminación SSL cibernética con Let’s Encrypt
- Soporte para certificados SSL proporcionados por el adjudicatario
- Reglas de proxy simples pero flexibles
- Proveedor de reglas de proxy de secante de comandos estática
- Proveedor de reglas de proxy dinámicas basadas en archivos
- Proveedor de Docker con detección cibernética
- Compatibilidad con varios hosts (virtuales)
- Compresión de tráfico opcional
- Límites y tiempos de dilación personalizados
- Distribución binaria única
- Distribución de contenedores Docker
- Servidor de activos estáticos incorporado
- Servidor de sucursal con información de ruta y métricas de Prometheus
El servidor (host) se puede configurar como FQDN, es asegurar s.example.com
o *
(Coger todo). Por ejemplo, la URL solicitada puede ser una expresión regular ^/api/(.*)
y la URL de destino puede tener grupos que coincidan con expresiones regulares en ie http://d.example.com:8080/$1
. Para el ejemplo preparatorio http://s.example.com/api/something?foo=bar
estará representado http://d.example.com:8080/something?foo=bar
.
En aras de la simplicidad, las consultas con el final /
y sin grupos de expresiones regulares expandidos a /(.*)
y los objetivos en estos casos se ampliaron /$1
. Es asegurar /api/
-> http://127.0.0.1/service
se traduce en ^/api/(.*)
-> http://127.0.0.1/service/$1
Se admiten tanto HTTP como HTTPS. Tanto los certificados estáticos como los certificados ACME (Let’s Encrypt) automatizados se pueden utilizar para HTTPS. El servidor de activos opcional se puede utilizar para servir archivos estáticos. Se debe puntualizar al menos un proveedor para iniciar Reproxy. Los demás parámetros son estrictamente opcionales y de un tipificado regular.
Ejemplos:
- con un proveedor quieto:
reproxy --static.enabled --static.rule="example.com/api/(.*),https://api.example.com/$1"
- con una detección cibernética de Docker:
reproxy --docker.enabled --docker.utilitario
Instalar
Tiene la última traducción estable :vX.Y.Z
Día (con :latest
Apelativo) y el avezado presente tiene :master
Rótulo.
proveedores
Reglas de proxy proporcionadas por varios proveedores. Incluido actualmente file
, docker
y static
. Cada proveedor puede puntualizar varias reglas de enrutamiento para solicitudes de proxy y estáticas (activos). El adjudicatario puede especificar varios proveedores al mismo tiempo.
Puede encontrar ejemplos en ejemplos de varios proveedores
Fijo
Este es el proveedor más simple que define todas las reglas de mapeo directamente en la secante de comando (o entorno). Se admiten varias reglas. Cada regla consta de 3 o 4 fundamentos separados por comas server,sourceurl,destination,[ping-url]
. Por ejemplo:
*,^/api/(.*),https://api.example.com/$1,
– Proxy todas las solicitudes a un host / servidor con/api
Prefijo ahttps://api.example.com
example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping
– Representar todas las solicitudesexample.com
y con/foo/bar
URL ahttps://api.example.com/zzz
. Usoshttps://api.example.com/ping
para el chequeo de lozanía
El posterior (cuarto) aspecto define una URL de ping opcional que se utilizará para los informes de lozanía. Es asegurar*,^/api/(.*),https://api.example.com/$1,https://api.example.com/ping
. Consulte la sección Examen de lozanía para obtener más información.
expediente
reproxy --file.enabled --file.name=config.yml
Ejemplo de config.yml
::
default: # the same as * (catch-all) server - route: "^/api/svc1/(.*)", dest: "http://127.0.0.1:8080/blah1/$1" - route: "/api/svc3/xyz", dest: "http://127.0.0.3:8080/blah3/xyz", "ping": "http://127.0.0.3:8080/ping", srv.example.com: - route: "^/api/svc2/(.*)", dest: "http://127.0.0.2:8080/blah2/$1/abc"
Este es un proveedor dinámico y el cambio de archivo se aplicará automáticamente.
estibador
El proveedor de Docker admite la detección completamente cibernética (con --docker.utilitario
) sin configuración adicional y redirige de forma predeterminada todas las solicitudes, como https://server/<container_name>/(.*)
a la IP interna del contenedor especificado y el puerto expuesto. Solo se reconocen los contenedores activos (en ejecución).
Esta configuración predeterminada se puede cambiar con etiquetas:
reproxy.server
– Servidor (nombre de host) adecuado. Incluso puede ser una serie de servidores separados por comas.reproxy.route
– ruta de origen (ubicación)reproxy.dest
– camino a la meta. Nota: Esta no es una URL completa, solo la ruta adjunta al puerto IP del contenedor.reproxy.port
– Puerto de destino del contenedor agradecidoreproxy.ping
– Ruta de ping para el contenedor de destino.reproxy.enabled
– activar (yes
,true
,1
) o desactivar (no
,false
,) Contenedor de dianas de reproducción.
Tenga en cuenta: sin --docker.utilitario
El contenedor de destino debe tener al menos uno de reproxy.*
Etiquetas para ser vistas como un objetivo potencial.
Con --docker.utilitario
Todos los contenedores con un puerto expuesto se consideran destinos de enrutamiento. Hay tres formas de delimitar esto:
- Excluir algunos contenedores de forma explícita
--docker.exclude
es asegurar--docker.exclude=c1 --docker.exclude=c2 ...
- Permitir solo una determinada red de Docker
--docker.network
- Establecer la protocolo
reproxy.enabled=false
oreproxy.enabled=no
oreproxy.enabled=0
Este es un proveedor dinámico y cualquier cambio en el estado del contenedor se aplicará automáticamente.
Soporte SSL
El modo SSL (ningún de forma predeterminada) se puede configurar en utilitario
(Certificados ACME / LE), static
(certificado existente) o none
. Si utilitario
El certificado SSL activado se emite automáticamente para todos los nombres de servidor reconocidos. El adjudicatario puede sobrescribirlo configurando --ssl.fqdn
Títulos)
Inicio sesión
De forma predeterminada, no se genera ningún registro de solicitudes. Esto se puede activar configurando --logger.enabled
. El registro (girado automáticamente) tiene el formato de registro de Apache combinado
El adjudicatario además puede iniciar sesión con stdout --logger.stdout
. Esto no afecta el registro de archivos, pero proporciona información mínima sobre las solicitudes que se procesan.
2021/04/16 01:17:25.601 [INFO] GET - /echo/image.png - xxx.xxx.xxx.xxx - 200 (155400) - 371.661251ms
2021/04/16 01:18:18.959 [INFO] GET - /api/v1/params - xxx.xxx.xxx.xxx - 200 (74) - 1.217669m
Servidor de activos
Los usuarios pueden habilitar (deshabilitar de forma predeterminada) el servidor de activos para entregar archivos estáticos. Mientras --assets.location
configúrelo manejará cualquier solicitud que no sea de proxy a continuación assets.root
como una solicitud de archivos estáticos. El servidor de activos se puede utilizar sin un proveedor de proxy. En este modo, Reproxy actúa como un servidor web simple para el contenido quieto.
Encima del servidor de activos comunes, se admiten varios servidores estáticos personalizados. Cada proveedor tiene una forma diferente de puntualizar dicha regla estática y es posible que algunos proveedores no la admitan en total. Por ejemplo, varios servidores estáticos tienen sentido en estáticos (proveedores de secante de comandos), proveedores de archivos e incluso proveedores de Docker.
- proveedor quieto: si el aspecto de origen tiene el prefijo
assets:
Se prostitución como un servidor de archivos. Por ejemplo*,assets:/web,/var/www,
servirá a todos/web/*
Solicitar con un servidor de archivos a través de/var/www
Directorio. - Proveedor de archivos: establezca un campo opcional
assets: true
- Proveedor de Docker –
reproxy.assets=web-root:location
es asegurarreproxy.assets=/web:/var/www
.
Assets Server admite el control de almacenamiento en gusto con el --assets.cache=<duration>
Parámetro. 0s
Duración (predeterminado) deshabilita el control de almacenamiento en gusto. Una duración es una secuencia de números decimales, cada uno con una fracción opcional y un sufijo de dispositivo, p. Ej. B. «300 ms», «1,5 h» o «2 h 45 m». Las unidades de tiempo válidas son «ns», «nosotros» (o «µs»), «ms», «s», «m», «h» y «d».
Hay dos formas de establecer la duración de la gusto:
- Un valencia único para todos los activos estáticos. Es tan simple como
--assets.cache=48h
. - Duración personalizada para diferentes tipos de MIME. Debe tener dos partes: el valencia predeterminado y los pares MIME: duración. En la secante de comando, esto parece múltiple
--assets.cache
Opciones, es asegurar--assets.cache=48h --assets.cache=text/html:24h --assets.cache=image/png:2h
. Los títulos del entorno deben estar separados por comas; H.ASSETS_CACHE=48h,text/html:24h,image/png:2h
Mas opciones
--gzip
Habilita la compresión gzip para las respuestas.--max=N
Le permite establecer el tamaño mayor de solicitud (predeterminado 64 KB).--header
Especifica encabezados adicionales que se agregarán a cada respuesta de proxy. Por ejemplo, se puede hacer con Docker compose:
environment: - HEADER= X-Frame-Options:SAMEORIGIN, X-XSS-Protection:1; mode=block;, Content-Security-Policy:default-src 'self'; style-src 'self' 'unsafe-inline';
Ping y controles de lozanía
Reproxy ofrece 2 puntos finales para este propósito:
/ping
argumenta conpong
e indica qué reproxy se está ejecutando/health
devoluciones200 OK
Estado cuando todos los servidores de destino han respondido a su solicitud de ping200
o417 Expectation Failed
Cuando uno de los servidores respondió con un código que no era 200. Incluso devuelve el cuerpo json con detalles sobre los servicios pasados / fallidos.
API de sucursal
Opcional, se puede encender con --mgmt.enabled
. Exposiciones 2 puntos finales mgmt.listen
(Dirección: Puerto):
GET /routes
– Índice de todas las rutas descubiertasGET /metrics
– devuelve métricas de Prometheus (http_requests_total
,response_status
yhttp_response_time_seconds
)
ver además ejemplos / métricas
Todas las opciones de aplicación
-l, --listen= listen on host:port (default: 127.0.0.1:8080) [$LISTEN]
-m, --max= max request size (default: 64000) [$MAX_SIZE]
-g, --gzip enable gz compression [$GZIP]
-x, --header= proxy headers [$HEADER]
--signature enable reproxy signature headers [$SIGNATURE]
--dbg debug mode [$DEBUG]
ssl:
--ssl.type=[none|static|auto] ssl (utilitario) support (default: none) [$SSL_TYPE]
--ssl.cert= path to cert.pem file [$SSL_CERT]
--ssl.key= path to key.pem file [$SSL_KEY]
--ssl.acme-location= dir where certificates will be stored by autocert manager (default: ./var/acme) [$SSL_ACME_LOCATION]
--ssl.acme-email= admin email for certificate notifications [$SSL_ACME_EMAIL]
--ssl.http-port= http port for redirect to https and acme challenge test (default: 80) [$SSL_HTTP_PORT]
--ssl.fqdn= FQDN(s) for ACME certificates [$SSL_ACME_FQDN]
assets:
-a, --assets.location= assets location [$ASSETS_LOCATION]
--assets.root= assets web root (default: /) [$ASSETS_ROOT]
--assets.cache= cache duration for assets (default: 0s) [$ASSETS_CACHE]
logger:
--logger.stdout enable stdout logging [$LOGGER_STDOUT]
--logger.enabled enable access and error rotated logs [$LOGGER_ENABLED]
--logger.file= location of access log (default: access.log) [$LOGGER_FILE]
--logger.max-size= maximum size in megabytes before it gets rotated (default: 100) [$LOGGER_MAX_SIZE]
--logger.max-backups= maximum number of old log files to retain (default: 10) [$LOGGER_MAX_BACKUPS]
docker:
--docker.enabled enable docker provider [$DOCKER_ENABLED]
--docker.host= docker host (default: unix:///var/run/docker.sock) [$DOCKER_HOST]
--docker.network= docker network [$DOCKER_NETWORK]
--docker.exclude= excluded containers [$DOCKER_EXCLUDE]
--docker.utilitario enable automatic routing (without labels) [$DOCKER_AUTO]
file:
--file.enabled enable file provider [$FILE_ENABLED]
--file.name= file name (default: reproxy.yml) [$FILE_NAME]
--file.interval= file check interval (default: 3s) [$FILE_INTERVAL]
--file.delay= file event delay (default: 500ms) [$FILE_DELAY]
static:
--static.enabled enable static provider [$STATIC_ENABLED]
--static.rule= routing rules [$STATIC_RULES]
timeout:
--timeout.read-header= read header server timeout (default: 5s) [$TIMEOUT_READ_HEADER]
--timeout.write= write server timeout (default: 30s) [$TIMEOUT_WRITE]
--timeout.idle= idle server timeout (default: 30s) [$TIMEOUT_IDLE]
--timeout.dial= dial transport timeout (default: 30s) [$TIMEOUT_DIAL]
--timeout.keep-alive= keep-alive transport timeout (default: 30s) [$TIMEOUT_KEEP_ALIVE]
--timeout.resp-header= response header transport timeout (default: 5s) [$TIMEOUT_RESP_HEADER]
--timeout.idle-conn= idle connection transport timeout (default: 90s) [$TIMEOUT_IDLE_CONN]
--timeout.tls= TLS hanshake transport timeout (default: 10s) [$TIMEOUT_TLS]
--timeout.continue= expect continue transport timeout (default: 1s) [$TIMEOUT_CONTINUE]
mgmt:
--mgmt.enabled enable management API [$MGMT_ENABLED]
--mgmt.listen= listen on host:port (default: 0.0.0.0:8081) [$MGMT_LISTEN]
Help Options:
-h, --help Show this help message