Um proxy reverso refere -se a um servidor usado para recuperar recursos em nome de um cliente de um ou mais servidores.
Os proxies reversos são uma ferramenta poderosa e popular que inclui balanceamento de carga em vários servidores, melhorando a segurança, ocultando o back -end do aplicativo, o cache de conteúdo e mais.
Ao trabalhar com Jenkins, você pode usar um proxy reverso para permitir que os usuários acessem o painel Jenkins usando um domínio ou subdomínio. Um proxy reverso também pode permitir que você melhore a segurança do cluster de Jenkins. O proxy reverso será um intermediário para um cliente e o servidor Jenkins.
Um exemplo de proxies reversos que podemos usar com Jenkins inclui Apache e Nginx, Haproxy, Microsoft IIS, Envoy e mais. Obviamente, você também pode configurar outros proxies reversos com Jenkins e a opção de qual se usará dependerão de seus requisitos e infraestrutura específicos.
No entanto, depois de configurar Jenkins com um proxy reverso, você pode encontrar um erro como “Erro! Proxy reverso configurado incorretamente.”
Este tutorial abordará métodos básicos que você pode usar para diagnosticar e corrigir esse erro.
O que causa este erro?
É bom lembrar que não há resposta definitiva sobre o que pode causar esse erro. A configuração de proxy reversa varia de acordo com o servidor de destino. No entanto, a principal causa desse erro está faltando cabeçalhos na solicitação do proxy reverso a Jenkins.
Como corrigir este erro?
Independentemente de qual proxy reverso você usa, você deve garantir que os seguintes cabeçalhos estejam incluídos em todos os pedidos para Jenkins.
Você pode fazer isso adicionando os cabeçalhos à sua configuração de proxy reversa. Os cabeçalhos incluem:
Você pode usar a configuração MOD_REWRITE no Apache e adicionar as seguintes opções:
SetentHeader Set X-forwarded-proto "https"
SetentHeader Conjunto X-Porta-Porra "443"
Para Nginx, use a configuração:
proxy_set_header x forwarded-proto https;
proxy_set_header x-forwarded-port 443;
Em Haproxy:
HTTP-REQUEST CAPETE X-PORTED-PORT 443
http-request add-header x forwarded-proto https
Verifique os cabeçalhos de entrada
Você pode verificar os cabeçalhos que estão atingindo Jenkins a partir do proxy reverso usando o script mostrado abaixo:
def req = org.Kohsuke.agrafador.Agrafador.CurrentRequest
def headernames = req.GetHeaderNames ();
enquanto (nomes de cabeças.hasMoreElements ())
def headername = nomes de cabeças.nextElement ();
se (!nome de cabeça.tolowerCase ().StartSwith ("x-forward")) continue
println (nome do cabeçalho+":");
Def Headers = Req.GETHEADERS (NAME DO CABELO);
enquanto (cabeçalhos.hasMoreElements ())
DEF HeadValue = cabeçalhos.nextElement ();
println ("\ t" + headValue);
O roteiro acima deve devolver os cabeçalhos que estão atingindo Jenkins. Um exemplo da saída esperada:
X-forwarded-Host:
domínio.com
X-forwarded-proto:
https
X-Forwarded-Port:
443
X-forwarded for:
Se você vir os cabeçalhos X-forwarded-Proto e X-forwarded, o proxy reverso será configurado corretamente. No entanto, se o problema persistir, verifique o servlet Jenkins.
Conclusão
Discutimos um dos erros comuns que você pode encontrar ao usar Jenkins com um proxy reverso e como você pode corrigi -lo.