今日もモロハマリ\(^o^)/
ALMiniumでJenkinsさん入れてみたんだけど、管理画面に入ると上記のように
リバースプロキシーの設定がおかしいようです。
とエラーが表示される。
状況は以下のような感じです。
- ALMiniumインストールするときに、Jenkins氏もインストールしてみた
- ドメインは「foobar.example.com」的な独自ドメインを使用
- httpsを強制する設定にした
- apt-getでバージョンが古いJenkinsが入って、なんかエラーが出てそもそも動いてないので、Jenkinsのサイトから最新のwarをダウンロードして配置
詳細を押すと「Jenkins says my reverse proxy setup is broken」ってページに飛ぶ。
「レスポンス中に含まれるLocation:をapacheがちゃんと書き換えないといけない」とかなんとか書いてあるけど、よく分からない。
レスポンスヘッダは以下のようにしたら見える。
curl -ik https://foobar.example.com/jenkins
Running Jenkins behind Apache ってページを参考に、ALMiniumが配置した設定ファイルに最小の変更を加えてこのエラーを消してみた。
/etc/apache2/sites-available/redmine
<VirtualHost _default_:443> SSLEngine On SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem DocumentRoot /opt/alminium/public ExpiresActive On ExpiresByType application/x-javascript A259200 ExpiresByType application/javascript A259200 ExpiresByType image/png A2592000 ExpiresByType image/jpeg A2592000 ExpiresByType image/gif A2592000 ExpiresByType text/css A2592000 ##### Jenkinsのために追記。 AllowEncodedSlashes NoDecode </VirtualHost>
/etc/apache2/sites-available/jenkins
<Location /jenkins> Order allow,deny Allow from all BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On ##### modified nocanonって追記して、RequestHeader云々追記した。 ProxyPass http://127.0.0.1:8080/jenkins nocanon ProxyPassReverse http://127.0.0.1:8080/jenkins RequestHeader set X-Forwarded-Proto "https" 【中略。そのまま。】 </Location>
解決策から逆算して、以下の二つの問題があったっぽい。
- httpsで繋いでるのに、レスポンスのLocation:がhttpsではなくhttpから始まってるのがまずかった。
- リバースプロキシのテストのために【https://foobar.example.com/jenkins/administrativeMonitor/hudson.diagnosis.ReverseProxySetupMonitor/testForReverseProxySetup/https%3A%2F%2Ffoobar.example.com%2Fjenkins%2Fmanage/】とかいうURLを見に行ってるっぽいが、Apacheの設定でこういうURLをそのままJenkinsに渡す設定にしてないとダメだった。
もうJenkinsさん、気難し屋すぎるよ。絶対執事キャラじゃない。
以前nginxの後ろでJenkinsさん動かしたときも、24時間ドハマリして、結局設定ファイルに1行だけ追記してちゃんと動いた記憶がある。
Jenkinsさん嫌い。