Un proxy inversé fait référence à un serveur utilisé pour récupérer des ressources au nom d'un client d'un ou plusieurs serveurs.
Les proxys inversés sont un outil puissant et populaire qui comprend l'équilibrage de charge sur plusieurs serveurs, l'amélioration de la sécurité en cachant le backend d'application, la mise en cache de contenu, et plus.
Lorsque vous travaillez avec Jenkins, vous pouvez utiliser un proxy inversé pour permettre aux utilisateurs d'accéder au tableau de bord Jenkins à l'aide d'un domaine ou d'un sous-domaine. Un proxy inversé peut également vous permettre d'améliorer la sécurité du cluster Jenkins. Le proxy inversé sera un intermédiaire pour un client et le serveur Jenkins.
Un exemple de proxys inverses que nous pouvons utiliser avec Jenkins comprend Apache et Nginx, Haproxy, Microsoft IIS, Envoy, et plus. Bien sûr, vous pouvez également configurer d'autres procurations inverses avec Jenkins et le choix de celui à utiliser dépendra de vos exigences et de vos infrastructures spécifiques.
Cependant, une fois que vous avez configuré Jenkins avec un proxy inversé, vous pouvez rencontrer une erreur telle que «Erreur! Proxy inversé mal configuré."
Ce tutoriel couvrira les méthodes de base que vous pouvez utiliser pour diagnostiquer et corriger une telle erreur.
Ce qui cause cette erreur?
Il est bon de se rappeler qu'il n'y a pas de réponse définitive sur ce qui peut provoquer cette erreur. La configuration proxy inverse variera en fonction du serveur cible. Cependant, la principale cause de cette erreur est manquant les en-têtes dans la demande du proxy inverse à Jenkins.
Comment corriger cette erreur?
Peu importe le proxy inversé que vous utilisez, vous devez vous assurer que les en-têtes suivants sont inclus dans toutes les demandes de Jenkins.
Vous pouvez le faire en ajoutant les en-têtes à votre configuration proxy inverse. Les en-têtes incluent:
Vous pouvez utiliser la configuration mod_rewrite dans Apache et ajouter les options suivantes:
Requête leheader a défini X-Forwarded-proto "https"
RequestHeader a défini X-Forwarded Port "443"
Pour Nginx, utilisez la configuration:
proxy_set_header x-Forwarded-proto https;
proxy_set_header X-Forwarded-Port 443;
En haproxy:
HTTP-Request set-header x-Forwarded-Port 443
HTTP-Request Add-Header
Vérifiez les en-têtes entrants
Vous pouvez vérifier les en-têtes qui atteignent Jenkins à partir du proxy inverse en utilisant le script ci-dessous:
def req = org.kohsuke.agrafeuse.Agrafeuse.actuel
Def Heading Names = req.getheadernames ();
pendant (noms de tête.HasmoreElements ())
Def Headername = nom de chef.nextElement ();
si (!nom de tête.TolowerCase ().startSwith ("x-forward")) continue
println (Headername + ":");
en-têtes def = req.Getheaders (nom de tête);
pendant que (en-têtes.HasmoreElements ())
Def Headvalue = En-têtes.nextElement ();
println ("\ t" + hiervalue);
Le script ci-dessus doit retourner les en-têtes qui atteignent Jenkins. Un exemple de la sortie attendue:
Hoste X-Forwarded:
domaine.com
Proto X-Forwarded:
https
Port X-Forwarded:
443
X-Forwarded-For:
Si vous voyez les en-têtes X-Proto et X-Forwardée à X, le proxy inversé est configuré correctement. Cependant, si le problème persiste, vérifiez le servlet Jenkins.
Conclusion
Nous avons discuté de l'une des erreurs courantes que vous pouvez rencontrer lorsque vous utilisez Jenkins avec un proxy inversé et comment vous pouvez le réparer.