Apacheの背後にあるTomcatで実行するために、Jenkinsサーバーをセットアップしています。私はSNIを使用してSSLで仮想ホストを使用しているため、 https://jenkins.example.com でそれにアクセスし、他のサービスを提供できます http:// www .example.com 。
起動して実行していますが、[Manage Jenkins]をクリックすると、次のように表示されます リバースプロキシの設定が壊れているようです 。
自己署名SSL証明書を使用しており、jenkins.example.comがデフォルトの仮想ホストではないことに注意してください。
関連するApache構成は次のようになります。
<VirtualHost *:80>
ServerName jenkins.example.com
Redirect / https://jenkins.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName jenkins.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/jenkins.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/jenkins.example.com.key
<Location />
AuthType Digest
AuthName "Jenkins"
AuthUserFile "/etc/htpasswords"
Require valid-user
</Location>
ProxyRequests Off
ProxyPreserveHost On
<Proxy http://localhost:8080*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / https://jenkins.example.com
</VirtualHost>
私が行った場合:
curl --user "username:password" --digest -k https://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test -L
次に、出力が表示されます。
<div/>
デバッグでwgetを実行すると、ある時点で、wgetがhttpsではなくhttpへのポインターを取得することがわかります。これがなぜ起こっているのか、または関連しているかはわかりませんが、正しくリダイレクトされます。
---response begin---
HTTP/1.1 302 Moved Temporarily
Date: Tue, 17 Jan 2012 19:47:16 GMT
Server: Apache-Coyote/1.1
Location: http://jenkins.example.com/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/test-for-reverse-proxy-setup
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/plain
私はUbuntu 11.04、Apache 2.2.17、Tomcat 6.0.28、Jenkins 1.448で実行しています。
私があなたの設定で見る1つの問題はそれです:
ProxyPassReverse / https://jenkins.example.com
する必要があります:
ProxyPassReverse / https://jenkins.example.com/
サービスがhttp://
ロケーションヘッダーの代わりにhttps://
を送信しているようです(Apacheからそのリスナーへの接続がlocalhostリスナーで暗号化されていないためと考えられます)。この場合、以下を追加する必要があります。
ProxyPassReverse / http://jenkins.example.com/
そのため、おそらく現在発生しているのは、API呼び出しが失敗しているということです。リダイレクトのhttp://
ヘッダーでLocation:
アドレスを取得しているためです(ProxyPassReverse
での未翻訳のため、これは見落とされていますhttp
ではありません)。
リクエストをその場所に送信し、<VirtualHost *:80>
からanotherリダイレクト応答を取得します。彼らの有効性チェッカーは正しくないこととエラーを知っていますが、curl
はもう1つのリダイレクトに従い、有効な応答を取得します。
上記のhttp://
にProxyPassReverse
を追加してください。そうすれば、問題が解決するはずです。
Apacheをリバースプロキシとして使用する場合は、少なくとも2.2.18で、オプションAllowEncodedSlashes NoDecode
を設定する必要があります(以前のバージョンには、オンとオフの値しかありませんが、どちらも間違っています)。 nocanon
ディレクティブのProxyPass
も同様です。
AllowEncodedSlashesは継承されないため、どちらもVirtualHost内で設定する必要があります。
<VirtualHost *:80>
AllowEncodedSlashes NoDecode
ServerName build.example.org
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyRequests Off
</VirtualHost>
https://stackoverflow.com/a/33179008/92356 経由:
システム構成で構成されたJenkins URLが、Jenkinsへのアクセスに使用しているURLと一致していることを確認してください。
システム構成にアクセスするには:
マシンのJenkinsフォルダーにあるjenkins.xmlファイルの<arguments>
セクションで設定されているポート値とポート値が一致することを確認します。