Un proxy inverso se refiere a un servidor utilizado para recuperar recursos en nombre de un cliente de uno o más servidores.
Los proxies inversos son una herramienta poderosa y popular que incluye el equilibrio de carga en múltiples servidores, mejorando la seguridad ocultando el backend de la aplicación, el almacenamiento en caché de contenido y más.
Al trabajar con Jenkins, puede usar un proxy inverso para permitir a los usuarios acceder al tablero de Jenkins usando un dominio o subdominio. Un proxy inverso también puede permitirle mejorar la seguridad del clúster Jenkins. El proxy inverso será un intermediario para un cliente y el servidor Jenkins.
Un ejemplo de proxies inversos que podemos usar con Jenkins incluye Apache y Nginx, HaProxy, Microsoft IIS, Envoy y más. Por supuesto, también puede configurar otros proxies inversos con Jenkins y la elección de la cual se utilizará dependerá de sus requisitos e infraestructura específicos.
Sin embargo, una vez que configure Jenkins con un proxy inverso, puede encontrar un error como "Error! Proxy inverso mal configurado."
Este tutorial cubrirá los métodos básicos que puede usar para diagnosticar y corregir tal error.
Que causa este error?
Es bueno recordar que no hay una respuesta definitiva sobre lo que puede causar este error. La configuración de proxy inversa variará según el servidor de destino. Sin embargo, la causa principal de este error es la falta de encabezados en la solicitud desde el proxy inverso a Jenkins.
Cómo arreglar este error?
No importa qué proxy inverso use, debe asegurarse de que los siguientes encabezados estén incluidos en todas las solicitudes a Jenkins.
Puede hacer esto agregando los encabezados a su configuración de proxy inversa. Los encabezados incluyen:
Puede usar la configuración mod_rewrite en Apache y agregar las siguientes opciones:
Requestheader establece X-Forwarded-Proto "HTTPS"
Requestheader establece el puerto X-Forwarded "443"
Para Nginx, use la configuración:
proxy_set_header x-forwarded-propo https;
proxy_set_header X-Forwarded-Port 443;
En Haproxy:
http-request set-header x-forward-puerto 443
http-request add-header x-forwardproto https
Verificar los encabezados entrantes
Puede verificar los encabezados que llegan a Jenkins desde el proxy inverso utilizando el script que se muestra a continuación:
Def req = orgar.kohsuke.engrapadora.Engrapadora.Request de corriente
Def Headernames = req.getheadernames ();
mientras (nombres de cabeza.HasmoreElements ())
Def Headername = Headernames.nextElement ();
si (!nombre de la cabeza.tolowercase ().Inicio con ("X-Forward")) Continuar
println (headername+":");
encabezados def = req.Getheaders (nombre de cabeza);
mientras (encabezados.HasmoreElements ())
Def Headervalue = encabezados.nextElement ();
println ("\ t" + Headervalue);
El guión anterior debe devolver los encabezados que llegan a Jenkins. Un ejemplo de la salida esperada:
X-Forwarded-Host:
dominio.comunicarse
X-Forwarded-Proto:
https
X-Forwarded Port:
443
X-Forwarded-para:
Si ve los encabezados X-Forwarded Proto y X-Forwarded Ports, el proxy inverso se configura correctamente. Sin embargo, si el problema persiste, verifique el servlet de Jenkins.
Conclusión
Discutimos uno de los errores comunes que puede encontrar al usar Jenkins con un proxy inverso y cómo puede solucionarlo.