Je ne sais pas pourquoi, après la mise à jour de Jenkins vers la version 1.591 (Ubuntu Server 12.04), le proxy inverse configuré correctement à l'origine est maintenant endommagé. Mon paramètre actuel est exactement le même que celui indiqué dans le wiki Jenkins:
ProxyPass /jenkins http://localhost:8081/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8081/jenkins
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8081/jenkins*>
Order deny,allow
Allow from all
</Proxy>
aussi --prefix=/jenkins
a été ajouté dans le fichier /etc/default/jenkins
Est-ce un bug chez Jenkins?
Il s'avère que tout fonctionne bien même si le message ennuyeux apparaît de manière persistante. Je pense que c'est un bug mineur de la version.
J'ai été confronté à ce problème avec Jenkins en tant que Windows Service Package.
Selon leur wiki :
Assurez-vous que l'URL Jenkins configurée dans la configuration système correspond à l'URL utilisée pour accéder à Jenkins.
Pour accéder à la configuration du système:
Assurez-vous que la valeur du port correspond à la valeur de port définie dans la section <arguments>
du fichier jenkins.xml situé dans le dossier Jenkins sur votre ordinateur.
Pour moi, le correctif consistait à ajouter:
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
Cela l'a fait cesser de se plaindre.
Voici un lien indique clairement que certaines choses sont modifiées après 1.552, donc l’ajout de ces nouvelles lignes;
nocanon and AllowEncodedSlashes
Résolu mon problème et l'avertissement est parti.
Jenkins a mis en place une surveillance proactive pour s'assurer que les serveurs proxy direct et inverse sont correctement configurés. Dans la version 1.552, ces tests ont été améliorés afin de détecter les configurations de proxy incorrectes qui n'étaient auparavant pas signalées comme étant endommagées. À partir de la version 1.572, même les instances de Jenkins qui ne reposent pas sur un proxy inverse affichent cet avertissement.
La correction d’une configuration de proxy inverse défectueuse dépend fortement de votre serveur Web et de votre conteneur d’applications Web. C’est pourquoi de nombreuses autres réponses à votre question ont été publiées. L'article de Jenkins Wiki sur ce sujet, " Jenkins dit que ma configuration de proxy inverse est cassée ", décrit plusieurs manières de résoudre ce problème dans les commentaires.
De l'article ci-dessus:
Pour qu'un proxy inverse fonctionne correctement, il doit réécrire les deux fichiers demande et la réponse.
Mais le reverse proxy correct implique également l’une des deux options suivantes:
- réécrire la réponse; ou
- définir l'en-tête X-Forwarded-Host (et peut-être X-Forwarded-Port) sur la demande transférée.
Dans mon cas, il s’agissait en réalité d’un problème avec la première option, pour laquelle la réécriture de ma réponse n’encodait pas correctement les barres obliques. Si vous utilisez Apache HTTPD avec Tomcat, vous devez ajouter la prise en charge des barres obliques codées aux serveurs les deux, et pas uniquement à Apache HTTPD.
Voici les instructions pour résoudre ce problème dans mon cas particulier: Jenkins 2.1.41 sur une instance Amazon Linux EC2, avec Apache 2.4, Tomcat 8.5 et Tomcat Connector.
Dans /etc/httpd/conf.d/ssl.conf
, ajoutez la ligne suivante pour votre Jenkins Host
ou VirtualHost
:
AllowEncodedSlashes NoDecode
Ajoutez la ligne suivante à /usr/share/Tomcat8/conf/catalina.properties
:
org.Apache.Tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
Redémarrez les deux services:
service httpd restart
service Tomcat8 restart
Actualisez votre page de gestion Jenkins. Le message d'avertissement aura disparu.
Un exemple d'implémentation de la deuxième option dans Apache HTTPD:
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
et pour NGINX:
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
Pour nginx, cela m'a également aidé:
proxy_redirect http://localhost:8080 https://your.ssl.domain.name
Ne pas inclure les barres obliques de fin dans les URL ci-dessus, et pas non plus dans l'URL proxy_pass
.