web-dev-qa-db-ger.com

Warum klagt Jenkins, dass mein Reverse Proxy-Setup fehlerhaft ist?

Ich habe keine Ahnung, warum nach dem Update von Jenkins auf Version 1.591 (Ubuntu Server 12.04) der ursprünglich korrekt eingerichtete Reverse-Proxy jetzt defekt ist. Meine aktuelle Einstellung ist genau die gleiche wie in Jenkins Wiki:

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>

--prefix=/jenkins wurde auch in /etc/default/jenkins-Datei hinzugefügt

Ist das ein Fehler in Jenkins? 

16
Kevin

Es stellt sich heraus, dass alles gut funktioniert, auch wenn die lästige Nachricht hartnäckig erscheint. Ich denke, es ist ein kleiner Fehler der Version.

5
Kevin

Ich war mit Jenkins als Windows Service Package konfrontiert.

Nach ihrem Wiki

Stellen Sie sicher, dass die in der Systemkonfiguration konfigurierte Jenkins-URL mit der URL übereinstimmt, die Sie für den Zugriff auf Jenkins verwenden.

So erreichen Sie die Systemkonfiguration:

  1. Gehen Sie zu Ihrer Jenkins-Seite
  2. Klicken Sie auf Jenkins verwalten
  3. Klicken Sie auf System konfigurieren
  4. Blättern Sie zu Jenkins Location und suchen Sie nach Jenkins URL.

Stellen Sie sicher, dass der Portwert mit dem Portwert übereinstimmt, der im Abschnitt <arguments> der Datei jenkins.xml im Ordner Jenkins auf Ihrem Computer festgelegt ist.

26
Josh Gieringer

Für mich bestand das Update darin, Folgendes hinzuzufügen:

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"

Dies machte es zu stoppen, sich zu beschweren.

6
Robin Winslow

Hier ist ein Link gibt eindeutig an, dass etwas nach 1.552 geändert wurde, sodass diese neuen Zeilen hinzugefügt werden;

 nocanon and AllowEncodedSlashes

Mein Problem und meine Warnung sind verschwunden.

3
Cem

Jenkins verfügt über eine proaktive Überwachung, um sicherzustellen, dass der Forward- und Reverse-Proxy ordnungsgemäß konfiguriert ist. In Version 1.552 wurden diese Tests verbessert, sodass falsche Proxy-Setups, die zuvor nicht als fehlerhaft gekennzeichnet wurden, jetzt erkannt werden. Ab Version 1.572 wird diese Warnung auch für Jenkins-Instanzen angezeigt, die nicht auf Reverse Proxy angewiesen sind.

Das Korrigieren einer fehlerhaften Reverse-Proxy-Konfiguration hängt stark von Ihrem Webserver und dem Webanwendungscontainer ab. Deshalb gibt es so viele andere Antworten zu Ihrer Frage. Der Jenkins-Wiki-Artikel zu diesem Thema " Jenkins sagt, mein Reverse-Proxy-Setup ist defekt ", beschreibt mehrere Möglichkeiten, um dies in den Kommentaren zu beheben.

Aus dem obigen Artikel:

Damit ein Reverse-Proxy ordnungsgemäß funktioniert, muss er beide .__ neu schreiben. Anfrage und die Antwort.

Zum korrekten Reverse-Proxying gehört jedoch auch eine von zwei Optionen:

  1. antwort neu schreiben; oder
  2. setzen des X-Forwarded-Host-Headers (und möglicherweise des X-Forwarded-Port) für die weitergeleitete Anforderung.

In meinem Fall war es tatsächlich ein Problem mit der ersten Option, bei der das Umschreiben der Antwort nicht korrekt codierte Schrägstriche war. Wenn Sie Apache HTTPD mit Tomcat verwenden, müssen Sie für beide -Server Unterstützung für codierte Schrägstriche hinzufügen, nicht nur für Apache HTTPD.

In diesem speziellen Fall erfahren Sie, wie Sie dieses Problem lösen können: Jenkins 2.1.41 in einer Amazon Linux EC2-Instanz mit Apache 2.4, Tomcat 8.5 und Tomcat Connector.

Fügen Sie in /etc/httpd/conf.d/ssl.conf die folgende Zeile für Ihre Jenkins Host oder VirtualHost hinzu:

AllowEncodedSlashes NoDecode

Fügen Sie die folgende Zeile zu /usr/share/Tomcat8/conf/catalina.properties hinzu:

org.Apache.Tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

Starten Sie beide Dienste neu:

service httpd restart
service Tomcat8 restart

Aktualisieren Sie Ihre Seite "Jenkins verwalten". Die Warnmeldung ist weg.


Ein Beispiel für die Implementierung der zweiten Option in Apache HTTPD:

RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"

und für NGINX:

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
0
vallismortis

Für nginx hat mir das auch geholfen:

proxy_redirect      http://localhost:8080 https://your.ssl.domain.name

Nicht schließt alle nachfolgenden Schrägstriche in die obigen URLs ein und auch nicht in die proxy_pass-URL.

0
Ghasan