Korzystam z dwóch usług za serwerem Apache: Jenkins (Port 8080) i SonarQube (Port 9000).
Moja konfiguracja apache wygląda następująco:
<VirtualHost *:80>
ServerName server
Redirect permanent / https://server.domain.com/
</VirtualHost>
<VirtualHost *:80>
ServerName server.domain.com
Redirect permanent / https://server.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName server.domain.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
ProxyPass /jenkins http://localhost:8080/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8080/jenkins
ProxyPassReverse /jenkins http://server.domain.com/jenkins
ProxyPassReverse /jenkins https://server.domain.com/jenkins
ProxyPass /sonar http://localhost:9000/sonar nocanon
ProxyPassReverse /sonar http://localhost:9000/sonar
AllowEncodedSlashes NoDecode
ProxyRequests Off
ProxyPreserveHost On
<Proxy http://localhost:8080/*>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
Wydaje się, że wszystko działa dobrze, z wyjątkiem tego, że Jenkins narzeka na ten komunikat: Wygląda na to, że konfiguracja odwrotnego proxy jest zepsuta.
Po uruchomieniu testu ReverseProxySetupMonitor dostarczonego przez Jenkins komunikat o błędzie wskazuje, że coś z odwrotnym proxy nie jest poprawnie skonfigurowane, ponieważ nie zastępuje http https:
$ curl -iLk -e https://server.domain.com/jenkins/manage https://server.domain.com/jenkins/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test
[...]
404 http://server.domain.com/jenkins/manage vs. https://server.domain.com/jenkins/manage
[...]
Pojawiło się to dopiero po włączeniu protokołu SSL na serwerze (który teraz używa certyfikatu z podpisem własnym).
Pytanie: Jak naprawić konfigurację zwrotnego serwera proxy, aby Jenkins był zadowolony? Punkty bonusowe za wskazówki, jak poprawić plik konfiguracyjny apache.
Sprawdziłem już następujące dwa powiązane pytania:
źródło
sudo a2enmod headers
, inaczejInvalid command 'RequestHeader'
ProxyPassReverse
dyrektyw dla tej samej ścieżki (/
)?Instalacja systemu Windows Apache Front-end dla Jenkins
Główne różnice tutaj:
Moja konfiguracja:
Zainstalowano d: \ (nie c: \ - dostosuj to do swoich potrzeb)
Jenkins jest na porcie 8080
Rozpakuj Apache httpd-2.4.18-win64-VC14.zip (z http://www.apachelounge.com/download/ ) do d: \.
Zainstaluj OpenSSL Win64OpenSSL_Light-1_0_2f.exe ( http://slproweb.com/products/Win32OpenSSL.html ) na d: \ OpenSSL-Win64
Utwórz certyfikat ssl:
cd do katalogu bin OpenSSL i uruchom magię:
Skopiuj pliki serwera. * Z d: \ OpenSSL-Win64 \ bin do D: \ Apache24 \ conf
Edytuj d: \ Apache24 \ conf \ httpd.conf:
Wyszukaj i zamień „c: /” na „d: /”
Zmień po wierszu „Listen 80”, dodając „Listen 443”:
Odkomentuj te linie:
Zaktualizuj „#ServerName www.example.com:80”, aby:
Dodaj to na końcu:
Nie zatrzymałem Jenkinsa nasłuchiwania na porcie 8080, więc nadal mogę się połączyć, jeśli apache się nie powiedzie. Moim celem przy użyciu https jest ukrywanie parametrów.
źródło