Servicios web
Sirve proxy inverso, redirecciones, archivos estáticos y texto fijo por dominio. Es el punto de entrada web unificado de Gately. Ubicación en el menú: barra lateral «Web → Servicios web».
Estructura: listeners, sitios y sitio por defecto
La configuración tiene tres niveles:
- Listener: un puerto de escucha. Sus campos incluyen la red (
tcpdoble pila,tcp4,tcp6), la dirección de escucha (vacía para todas las direcciones), el puerto, el interruptor de HTTPS, la versión mínima de TLS (1.0 / 1.1 / 1.2 / 1.3) y si acepta el protocolo PROXY. - Sitio: un sitio dentro de un listener, que se selecciona por dominio. Los dominios pueden ser un dominio exacto,
*.example.com(coincide con subdominios de cualquier profundidad) o*(coincide con todo). La prioridad de coincidencia es dominio exacto, comodín y después*. - Sitio por defecto: se usa cuando ningún sitio coincide. Si no está activado, se devuelve un 404.
Al guardar un cambio en un sitio o en el sitio por defecto, la lista de sitios se sustituye en caliente: el listener sigue funcionando, las conexiones abiertas (incluido WebSocket) se mantienen y cada sitio conserva sus estadísticas. Si la nueva configuración no es válida, los sitios anteriores siguen sirviendo. Cambiar los ajustes propios del listener (red, dirección, puerto, HTTPS, TLS mínimo, HTTP/3, protocolo PROXY) reinicia ese listener.
Tipos de sitio
| Tipo | Descripción |
|---|---|
| Proxy inverso | Reenvía a uno o varios backends. Las direcciones de backend tienen la forma http(s)://host:port y se admite WebSocket |
| Redirección | Redirige a una URL completa con código de estado 301 / 302 / 307 / 308 (por defecto 302), conservando opcionalmente la ruta y la cadena de consulta originales. La URL puede contener {host}, que se sustituye por el dominio que usó el visitante: https://{host} con «Conservar ruta y consulta» envía todas las peticiones HTTP a HTTPS en el mismo dominio |
| Archivos estáticos | El directorio debe ser una ruta absoluta. Con «Listado de directorios» desactivado, una petición a un directorio solo devuelve respuesta si existe index.html. «URL sin extensión» prueba ruta.html y ruta/index.html cuando falta un archivo (para VitePress y generadores similares, como try_files $uri $uri.html $uri/index.html de nginx). «Página 404» es una ruta dentro del directorio, como 404.html, que se devuelve con estado 404 |
| Texto fijo | Contenido personalizado, Content-Type (por defecto text/plain; charset=utf-8) y código de estado (100-599, por defecto 200) |
Otras opciones de los sitios de proxy inverso:
- Usar el Host del backend: la cabecera Host se cambia a la dirección del backend; si está desactivado, se conserva el Host de la petición del cliente;
- Omitir la verificación del certificado del backend, desactivar Keep-Alive;
- Enviar el protocolo PROXY al backend (cabecera v2, transmite la IP real del cliente, requiere compatibilidad del backend);
- Añadir
X-Forwarded-For/X-Forwarded-Proto/X-Forwarded-Host/X-Forwarded-PortyX-Real-IP; - Usar el dominio visitado como SNI (solo backends HTTPS): el handshake lleva el dominio que usó el visitante y el certificado se verifica con él, como
proxy_ssl_server_name on; proxy_ssl_name $hostde nginx. Actívalo cuando el backend enrute por SNI, por ejemplovhost_httpsde frp. Cada backend tiene su propio pool de conexiones, así que las conexiones nunca se reutilizan entre dominios.
Los sitios de cualquier tipo pueden definir un registro de acceso, orígenes cruzados (CORS), cabeceras de petición y respuesta personalizadas (un Clave: Valor por línea; un Valor vacío elimina esa cabecera) y pueden hacer referencia a una instancia de Cortafuegos WAF (si la instancia no existe o está desactivada, las peticiones pasan sin filtrar).
Transporte y protocolos
- HTTPS: usa un certificado del módulo Certificados SSL que cubra el dominio;
- HTTP/3 (QUIC): actívalo en un listener con HTTPS para servir también HTTP/3 por UDP en el mismo número de puerto; se anuncia al navegador con la cabecera de respuesta
Alt-Svc. Hay que permitir ese puerto UDP en el cortafuegos y en el reenvío de puertos; - WebSocket: el proxy inverso lo admite automáticamente;
- Protocolo PROXY: un listener puede aceptar cabeceras PROXY enviadas por componentes situados antes (como haproxy y frp). Solo confía en las IP o subredes indicadas en «Ajustes globales → Orígenes PROXY de confianza»; si se deja vacío, no confía en ningún origen. El proxy inverso puede enviar cabeceras PROXY al backend.
Autenticación
Se configura en la página «Seguridad» del editor del sitio:
- Autenticación web: el navegador muestra una página de inicio de sesión;
- Autenticación básica: HTTP Basic;
- Usuarios: un
usuario:contraseñapor línea, y la contraseña puede ser un hash bcrypt. La autenticación básica necesita al menos un usuario cuando está activada; la autenticación web necesita al menos un usuario o una identidad de inicio de sesión de terceros cuando está activada; - Inicio de sesión de terceros: se admiten GitHub, Google, QQ y OIDC, con tus propias aplicaciones OAuth. Las identidades permitidas se escriben una por línea con la forma
proveedor:cuenta, por ejemplogithub:octocatygoogle:me@gmail.com. Un#al final de una línea añade un comentario, ygithub:*significa cualquier cuenta de ese proveedor.
Los proveedores de inicio de sesión de terceros se configuran en «Ajustes globales»: introduce tu propio Client ID / Secret, activa el proveedor y define también una dirección de callback (debe ser atendida por uno de los listeners de Gately, por ejemplo https://auth.example.com). La URL de callback que debes registrar en GitHub / Google / QQ es:
https://auth.example.com/__gately_auth/oauth/callbackEl inicio de sesión de terceros de la propia interfaz de administración se configura por separado en «Ajustes → Cuenta y seguridad».
Autenticación delegada (Authelia y similares)
Delega la autenticación en un servicio externo, como auth_request de nginx o forwardAuth de Traefik. Marca «Autenticación delegada» en la página «Seguridad». No se puede combinar con la autenticación básica o web en el mismo sitio.
| Campo | Descripción |
|---|---|
url | El endpoint de comprobación, como el de Authelia, http://127.0.0.1:9091/api/authz/auth-request |
loginUrl | Adónde enviar a los visitantes cuando el endpoint responde 401, como https://auth.example.com/?rd={url}&rm={method}. {url} es la dirección original (codificada como URL) y {method} el método de la petición. Si está vacío, se devuelve tal cual la respuesta del endpoint |
copyHeaders | Cabeceras de identidad que se copian de la respuesta del endpoint a la petición al backend; por defecto son Remote-User, Remote-Groups, Remote-Email y Remote-Name |
Cómo funciona:
- Cada petición va primero a
urlcomo un GET sin cuerpo, con las cabeceras del visitante (cookies,Authorization, etc.) másX-Original-Method,X-Original-URL,X-Forwarded-Method,X-Forwarded-Proto,X-Forwarded-Host,X-Forwarded-Uri,X-Forwarded-ForyX-Real-Ip. El tiempo de espera es de 10 segundos; - Una respuesta 2xx deja pasar la petición, con las cabeceras de identidad añadidas; un 401 redirige a
loginUrl(estado 302); otras respuestas, como 403 o una redirección, se devuelven al visitante; un servicio inalcanzable produce 502; - Las cabeceras de identidad enviadas por los visitantes se eliminan siempre, por lo que no se pueden falsificar;
- Funciona con las reglas por ruta y el «Ámbito de autenticación», de modo que solo algunas rutas (por ejemplo
/admin) requieran inicio de sesión, y con los enlaces temporales para compartir.
Usuarios compartidos: TOTP e inicio de sesión único
Define las cuentas una sola vez y úsalas en varios sitios, con verificación en dos pasos TOTP opcional. Cubre lo que muchas personas buscan al ejecutar Authelia.
En «Ajustes globales → Usuarios compartidos»:
- Añade usuarios con un nombre de usuario y una contraseña. Las contraseñas se guardan como hashes bcrypt y la API nunca las devuelve. Para añadir TOTP, pulsa «Activar TOTP», escanea el código QR con una app de autenticación (Google Authenticator, 1Password, etc.) y guarda. Regenerar la clave invalida la anterior;
- Dominio de SSO, como
example.com: tras iniciar sesión en cualquier sitio de ese dominio o de sus subdominios, los demás sitios no piden volver a iniciar sesión. Usa una cookie de dominio padre (gately_sso, válida durante 7 días) que nunca se reenvía a los backends. Déjalo vacío para iniciar sesión en cada sitio por separado.
En un sitio, marca «Usar usuarios compartidos» junto a la autenticación web o básica. Los usuarios propios del sitio siguen funcionando también.
Comportamiento:
- La página de inicio de sesión muestra un campo de código de verificación cuando algún usuario compartido tiene TOTP. Cada código sirve una sola vez;
- Cambiar la contraseña o la clave TOTP de un usuario cierra las sesiones de ese usuario;
- La autenticación básica solo acepta usuarios compartidos sin TOTP, porque el aviso de contraseña del navegador no tiene dónde introducir un código;
- Los intentos fallidos cuentan para el mismo límite de intentos y bloqueo automático que los demás inicios de sesión.
Control de acceso
Listas de IP permitidas y bloqueadas
El «Control de acceso por IP» de la página «Seguridad» del sitio puede estar desactivado, en modo lista de permitidas o en modo lista de bloqueadas. La lista admite una IP o subred por línea (como 192.168.1.0/24) y además puede hacer referencia a listas de IP suscritas.
Listas de IP suscritas
Añade listas en «Ajustes globales → Listas de IP suscritas»: indica la URL de descarga y el intervalo de actualización (24 horas por defecto). Gately las descarga periódicamente y las guarda en caché en el directorio de configuración, de modo que tras un reinicio se pueden usar sin conexión a Internet. El contenido admite una IP, un CIDR o un rango inicio-fin por línea; lo que va detrás de #, ; o // es un comentario. Por ejemplo, para los rangos de IP de provincias y ciudades chinas puedes usar https://metowolf.github.io/iplist/data/cncity/440000.txt (provincia de Guangdong) de metowolf/iplist.
- Las listas de IP permitidas y bloqueadas de los sitios y de las reglas por ruta pueden hacer referencia a varias listas, que se comprueban junto con los rangos escritos a mano; coincidir con cualquiera cuenta como estar en la lista;
- Si el contenido descargado no se puede analizar (por ejemplo, se recibe una página de error), se conserva la lista anterior, se muestra el motivo en la lista y se reintenta al cabo de una hora;
- Hasta que la lista se descarga correctamente cuenta como vacía: una lista de IP permitidas deniega por tanto el acceso y una lista de IP bloqueadas no bloquea nada adicional;
- Una lista a la que todavía hace referencia algún sitio no se puede eliminar.
Reglas por ruta
En «Reglas por ruta», dentro de la página «Seguridad», sobrescribe la autenticación y la configuración de IP del sitio según el prefijo de ruta:
| Campo | Valores |
|---|---|
prefix | Un prefijo de ruta que empieza por /, como /admin |
auth | Heredar del sitio (vacío), off (sin autenticación), on (autenticación obligatoria) |
ipMode / ipList | Heredar del sitio (vacío), whitelist o blacklist, con una lista de IP o subredes |
Reglas de coincidencia:
- Gana el prefijo más largo;
- La coincidencia respeta los límites de segmento de ruta:
/admincoincide con/adminy/admin/x, pero no con/administrator; - La ruta de la petición se normaliza primero (se eliminan
.,..y las barras duplicadas) y después se compara, así que/public/../adminse trata como/admin; - Solo se puede configurar una regla para el mismo prefijo.
La opción «Ámbito de autenticación» (authOptional): cuando está marcada, la autenticación solo se aplica a las rutas marcadas como «Obligatoria» en las reglas, y el resto de rutas son públicas. Esta opción requiere activar antes la autenticación básica o web.
Enlaces temporales para compartir
Cuando la autenticación básica o web está activada, puedes crear enlaces para compartir de un sitio, de modo que los visitantes accedan sin cuenta:
| Campo | Descripción |
|---|---|
| Nombre | Una etiqueta, como «Para Alice» |
| Caducidad | Vacío para que no caduque |
Usos maxUses | Número máximo de veces que se puede canjear el enlace; 0 significa sin límite. El contador se reinicia tras un reinicio |
Límite de ruta pathPrefix | Si no está vacío, el enlace solo puede acceder a las rutas bajo este prefijo; debe empezar por / |
Un visitante abre https://dominio/cualquier-ruta?_gs=token para canjear una sesión. Tras un canje correcto, el servidor establece una cookie de acceso sin inicio de sesión y redirige a la dirección sin el parámetro _gs. La sesión dura como máximo 24 horas y nunca más allá de la caducidad del enlace. Un token no válido se trata como una visita normal y no revela el motivo del fallo. Las sesiones ya emitidas dejan de ser válidas de inmediato al eliminar el enlace. El token se genera al guardar (de al menos 16 caracteres) y el enlace completo se puede copiar desde la interfaz.
Límite de intentos de autenticación y bloqueo automático
- Tras 10 autenticaciones fallidas desde la misma IP de origen en 15 minutos, los intentos posteriores se rechazan durante un tiempo;
- En «Ajustes globales → Bloqueo automático → Bloquear por fallos de autenticación», introduce un número de minutos (de 0 a 43200); la IP de origen se bloquea al llegar a 10 fallos. 0 significa sin bloqueo, solo limitación de intentos;
- Cuando se activa un bloqueo automático se publica un evento
AuthBanned, que se puede enviar por el Centro de notificaciones; - Las direcciones IPv6 se cuentan y se bloquean por subred /64.
Lista de bloqueos
La lista de bloqueos de «Ajustes globales» muestra las IP bloqueadas actualmente, el motivo (fallos de autenticación repetidos o bloqueo manual) y la hora de expiración, y cada entrada se puede levantar con «Desbloquear». También puedes bloquear manualmente: introduce una IP y un número de horas (de 1 a 720, es decir, 30 días como máximo); la API usa 24 horas por defecto.
La lista de bloqueos se comparte con Prevención de intrusiones: con el módulo activado, aquí solo se muestra el número de bloqueos y un enlace a su página para gestionarlos. Los bloqueos también afectan al reenvío de puertos, STUN y otros servicios, y se descartan en el cortafuegos del sistema si la sincronización está activada; con «Ignorar direcciones de la LAN» activado, esas direcciones nunca se bloquean automáticamente.
Filtro de países con GeoIP
El «Filtro de países» de un sitio tiene tres modos: desactivado, permitir solo y denegar. Introduce códigos de país ISO de dos letras separados por comas, como CN, HK, US. Cuando está activado se requiere al menos un país.
- El filtrado depende de una base de datos GeoIP, que debes importar antes en «Ajustes globales → Base de datos GeoIP»: sube un archivo
.mmdbo introduce una URL de descarga. Se admiten MaxMind GeoLite2, DB-IP y otras bases de datos de países o ciudades; el límite de subida es de 129 MB; - Si no hay ninguna base de datos cargada, el filtrado no tiene efecto (todos los visitantes pasan) y la interfaz muestra un aviso;
- Las direcciones de redes privadas siempre se permiten;
- En el modo «Denegar», se permiten las direcciones cuyo país no se encuentra en la base de datos.
Backends por ruta
Para un sitio de proxy inverso, envía las peticiones bajo un prefijo de ruta a otros backends, como location /api/ { proxy_pass ...; } de nginx. Añádelos en «Backends por ruta», en la página «Básico» del editor del sitio.
| Campo | Descripción |
|---|---|
prefix | Un prefijo de ruta como /api/. La coincidencia respeta los límites de segmento de ruta: /api y /api/ coinciden ambos con /api y /api/x, pero no con /apix |
targets | Los backends de esta ruta, escritos como los backends del sitio. Si está vacío, se usan los del sitio y solo se añaden las cabeceras siguientes |
requestHeaders | Cabeceras de petición añadidas para esta ruta, una Clave: Valor por línea. Se aplican después de las del sitio, y una cabecera con el mismo nombre sustituye a la del sitio |
- Gana el prefijo más largo y la ruta se reenvía sin cambios (el prefijo no se elimina);
- Los demás ajustes del sitio, como la opción de Host, las comprobaciones de certificado, las cabeceras reenviadas, el protocolo PROXY, la política de balanceo de carga y las comprobaciones de estado, se aplican a todos los backends por ruta;
- La compresión, el límite de peticiones, la caché y las reescrituras se aplican a todo el sitio.
Mejoras del proxy inverso
Estas opciones están en la página «Tráfico» del editor del sitio.
Backends, peso y reserva
La lista de backends admite una dirección por línea, seguida opcionalmente de parámetros:
http://10.0.0.2:8080 weight=3
http://10.0.0.3:8080 backupweight=N: peso, un entero de 1 a 100, por defecto 1;backup: un backend de reserva que solo se usa cuando todos los backends que no son de reserva no están disponibles. Cuando todos los backends no están disponibles, se vuelven a probar los que no son de reserva.
Política de balanceo de carga
| Opción de la interfaz | lbPolicy | Descripción |
|---|---|---|
| Round robin (ponderado) | Vacío | Por defecto |
| Aleatorio (ponderado) | random | |
| Hash de IP (sesiones persistentes) | ip_hash | La misma IP de cliente siempre va al mismo backend |
| Menos conexiones | least_conn | Elige el menor valor de conexiones / peso |
Comprobaciones de estado
El interruptor de comprobación activa está desactivado por defecto. Campos y valores por defecto una vez activado:
| Campo | Por defecto | Rango |
|---|---|---|
Modo mode | http | http (solicita la ruta de comprobación; un código de estado inferior a 400 cuenta como saludable) o tcp (solo prueba la conexión) |
Ruta path | / | Empieza por /, solo en modo http |
Intervalo interval | 10 segundos | De 1 a 3600 |
Tiempo de espera timeout | 3 segundos | De 1 a 60 |
Fallos consecutivos fails | 3 fallos lo marcan como no disponible | De 1 a 20 |
Éxitos consecutivos passes | 2 éxitos lo recuperan | De 1 a 20 |
Si está activado el envío del protocolo PROXY al backend, las comprobaciones HTTP cambian automáticamente a TCP.
Las comprobaciones pasivas siempre están activas: entre varios backends, uno con 3 fallos de conexión consecutivos se pausa durante 30 segundos antes de volver a sondearlo (un backend único sin comprobación activa nunca se retira). Una vez activadas las comprobaciones activas, la recuperación se decide por completo según sus resultados. Cuando cambia el estado de un backend, se publican los eventos de backend caído y backend recuperado, que se pueden enviar por el Centro de notificaciones.
Compresión
La compresión se puede activar en los sitios de proxy inverso, archivos estáticos y texto fijo (no en los de redirección). Según Accept-Encoding, se prefiere br y después gzip.
- Solo se comprime el contenido de tipo texto:
text/*, JSON, JavaScript, XML, XHTML, RSS / Atom, WebAssembly y SVG; se excluyetext/event-stream; - Las respuestas cuyo
Content-Lengthdeclarado es inferior a 256 bytes se dejan tal cual; - Las respuestas que ya tienen un
Content-Encodingse dejan tal cual; las peticiones de actualización a WebSocket pasan directamente; - Tras la compresión, los ETag fuertes se convierten en ETag débiles.
Límite de peticiones por IP
Limitación de peticiones con token bucket por IP de cliente. Campos:
| Campo | Descripción |
|---|---|
rate | Peticiones permitidas por segundo |
burst | Capacidad de ráfaga. Cuando se define rate y burst es 0, por defecto vale rate redondeado hacia abajo más 1 |
maxConns | Máximo de peticiones simultáneas por IP; 0 significa sin límite |
Cuando el límite de peticiones está activado, se debe definir al menos uno de rate y maxConns.
Caché de respuestas en memoria
Se aplica solo a los sitios de proxy inverso. La caché vive en memoria y usa expulsión LRU.
| Campo | Por defecto | Rango |
|---|---|---|
Duración por defecto ttl | 0 | De 0 a 30 días (en segundos). Cuando el origen no declara ninguna directiva de caché, las respuestas 200 se almacenan durante este tiempo; 0 significa que solo se almacenan las respuestas que el origen permite explícitamente |
Capacidad de la caché maxMb | 64 | De 1 a 4096 MB |
Reglas de caché:
- Solo se almacenan las peticiones GET, y la petición no debe contener las cabeceras
Authorization,CookieniRange, niCache-Control: no-cache; - Solo se almacenan las respuestas con estado 200; se omite una respuesta si contiene
Set-Cookie,Vary: *o unCache-Controlconno-store/private/no-cache; - Se respeta primero
s-maxagey despuésmax-age; - Una entrada individual está limitada a 4 MB y también a un máximo de una cuarta parte de la capacidad total;
- Un acierto devuelve las cabeceras
X-Cache: HITyAge, y un fallo devuelveX-Cache: MISS; - La clave de caché incluye el Host, la URI completa de la petición y
Accept-Encoding.
Reescritura y redirección de rutas
Las reglas se evalúan en orden y la evaluación se detiene en la primera coincidencia.
| Campo | Descripción |
|---|---|
pattern | Una expresión regular que se compara con la ruta de la petición, como ^/old/(.*)$ |
to | El resultado de la sustitución; usa $1 para referirte a los grupos |
redirect | Desactivado para una reescritura interna (la ruta reescrita se envía al backend y el destino debe empezar por /); activado para una redirección |
code | Código de estado de la redirección 301 / 302 / 307 / 308, por defecto 302 |
Las redirecciones conservan los parámetros de consulta originales. El destino de una redirección puede contener {host}, el dominio que usó el visitante. Las reglas de redirección se ejecutan antes de la autenticación, como location = / { return 302 ...; } de nginx, de modo que una ruta como / puede enviar a los visitantes a otro sitio sin pedirles que inicien sesión.
Estadísticas de acceso y monitorización
Estadísticas del sitio
En un listener en ejecución, pulsa «Estadísticas» en la fila de un sitio para abrir la ventana de estadísticas, donde puedes elegir la última hora, las últimas 6 horas o las últimas 24 horas:
- Estadísticas de acceso por minuto: un punto por minuto, conservadas durante las últimas 24 horas, con una curva de número de peticiones y curvas de errores 4xx / 5xx;
- Distribución de códigos de estado (2xx / 3xx / 4xx / 5xx) y tráfico de respuesta acumulado;
- Las 10 IP de origen y los 10 países principales (las estadísticas por país requieren una base de datos GeoIP importada);
- Los sitios de proxy inverso muestran el estado de salud, el peso, la marca de reserva y el número actual de conexiones de cada backend.
Las estadísticas se guardan en memoria y vuelven a empezar a contarse tras un reinicio o tras cambiar los ajustes propios del listener. Editar un sitio conserva sus contadores. Las clasificaciones siguen como máximo 5000 orígenes distintos.
Métricas de Prometheus
El endpoint global GET /api/metrics reúne las métricas de todos los módulos; consulta Métricas de monitorización. El endpoint del módulo que se describe a continuación solo incluye las métricas de los servicios web.
El endpoint de métricas es GET /api/webservice/metrics, en formato de texto de Prometheus, y requiere credenciales de inicio de sesión o un token de API.
curl -H "Authorization: Bearer gtl_xxxx" http://localhost:16680/api/webservice/metrics| Métrica | Tipo | Descripción |
|---|---|---|
gately_site_requests_total | counter | Peticiones acumuladas de un sitio |
gately_site_errors_total | counter | Errores de backend de un sitio |
gately_site_active_requests | gauge | Peticiones en curso |
gately_site_response_bytes_total | counter | Bytes de respuesta acumulados |
gately_site_responses_total | counter | Respuestas contadas por clase de estado (etiqueta class: de 2xx a 5xx) |
gately_upstream_up | gauge | Si un backend está saludable: 1 saludable, 0 no disponible (con la etiqueta upstream) |
Todas las métricas llevan las etiquetas listener (nombre del listener#clave del listener) y site (nombre del sitio o, si no tiene, el primer dominio).
Importar configuración de nginx
El botón «Importar nginx» de la parte superior de la página convierte sitios de nginx existentes en listeners y sitios de Gately. Se recomienda ejecutar nginx -T en el host de nginx y pegar la salida completa: incluye todos los archivos de include, y Gately los expande igual que nginx.
- Primero la vista previa: agrupados por puerto de escucha, se muestran el tipo de cada sitio, su backend o directorio, el archivo de origen y el número de línea, y los puntos a revisar (directivas que usan variables, location con expresiones regulares, dominios sin certificado, etc.); para los sitios que no se pueden convertir se indica el motivo;
- Los sitios de un mismo puerto se añaden al listener existente o, si no hay ninguno, se crea un listener nuevo; los dominios que ya existen se omiten, así que se puede importar varias veces;
- Por defecto se importan desactivados, para revisarlos uno a uno en paralelo con nginx antes de activarlos; con «Activar tras importar» marcado se aplican de inmediato (si nginx sigue ocupando el mismo puerto, el listener nuevo no podrá iniciarse);
- Se convierten:
proxy_pass(incluidos el peso, la reserva y la política de balanceo de carga de upstream), directorios estáticosroot/alias(autoindex,try_files $uri.html,error_page 404), redirecciones y contenido fijo conreturn, redireccionesrewritede todo el sitio,add_header,proxy_set_header,gzip,allow/deny, backends por ruta, control de acceso y redirecciones a nivel de location, ylisten ... proxy_protocolyquic; auth_requestse convierte en autenticación delegada: el endpoint de autenticación se toma delproxy_passde la location de la subpetición de autenticación (admite variables conset) y la redirección de inicio de sesión deerror_page 401 =302, por lo que la configuración habitual de Authelia se convierte directamente; si solo está activado en algunas location, se convierte en un «Ámbito de autenticación» limitado a esas rutas;auth_basicse convierte en autenticación básica con usuarios compartidos; el archivo de usuarios de nginx no se lee, así que nadie podrá pasar hasta que añadas los usuarios;- El reenvío TCP/UDP de
streamse configura en Reenvío de puertos. Los certificados no se importan: si a un sitio HTTPS le falta el certificado, la vista previa muestra los archivos de certificado que usa nginx, y puedes añadirlos por ruta de archivo en la página de Certificados.
Sustituir haproxy y nginx
El reenvío de puertos y los servicios web juntos pueden sustituir la pareja haproxy + nginx. Una disposición habitual es una regla de enrutamiento SNI en el puerto 443 que envía la VPN y otros servicios TLS directamente a sus backends y todo lo demás a un listener de servicios web que acepta el protocolo PROXY, más un listener de servicios web en el puerto 80 con un sitio de redirección (https://{host}).
Conversión de ajustes de nginx:
| nginx | Gately |
|---|---|
server con server_name | un sitio con esos dominios |
location con otro proxy_pass | backends por ruta |
auth_request (Authelia) | autenticación delegada, o usuarios compartidos con TOTP |
proxy_ssl_name $host | usar el dominio visitado como SNI |
return 301 https://$host$request_uri | un sitio de redirección con https://{host} y «Conservar ruta y consulta» |
return 302 /admin en location = / | una reescritura con «Redirección» activada y patrón ^/$ |
try_files $uri $uri.html $uri/index.html y error_page 404 | archivos estáticos con URL sin extensión y página 404 |
add_header | cabeceras de respuesta |
Consejo de despliegue
Los servicios web necesitan escuchar en puertos del host como el 80 / 443. En despliegues con Docker se recomienda --network host.