Apacheサーバーの背後でJenkins(ポート8080)とSonarQube(ポート9000)の2つのサービスを実行しています。
私のApache設定は次のようになります。
<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>
Jenkinsがこのメッセージで不平を言っていることを除いて、すべてが正常に動作しているようです:リバースプロキシの設定が壊れているようです
Jenkinsが提供するReverseProxySetupMonitorテストを実行すると、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
[...]
これはafter後にのみ表示されました(現在、自己署名証明書を使用している)サーバーでSSLを有効にしました。
質問:Jenkinsが満足するようにリバースプロキシの設定を修正するにはどうすればよいですか? Apache構成ファイルを改善するためのヒントのボーナスポイント。
私はすでに次の2つの関連する質問をチェックしました:
このページ wikiでJenkinsは、2014年7月として、Jenkinsリバースプロキシの推奨構成として言及しています。欠落しているパラメーターはRequestHeader set X-Forwarded-Proto "https"
およびRequestHeader set X-Forwarded-Port "443"
したがって、構成は
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cert.pem
ServerAdmin webmaster@localhost
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / http://www.example.com/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
Jenkins用のWindows Apacheフロントエンドセットアップ
ここでの主な違いは次のとおりです。
私のセットアップ:
インストールはd:\に行われました(c:\ではありません-これをニーズに合わせて調整してください)
Jenkinsはポート8080にあります
Apache httpd-2.4.18-win64-VC14.Zip( http://www.apachelounge.com/download/ から)をd:\に解凍します。
OpenSSL Win64OpenSSL_Light-1_0_2f.exe( http://slproweb.com/products/Win32OpenSSL.html )をd:\ OpenSSL-Win64にインストールします
SSL証明書を作成します。
openSSL binディレクトリにcdし、魔法を実行します。
pushd d:\OpenSSL-Win64\bin
set OPENSSL_CONF=openssl.cfg
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Server。*ファイルをd:\ OpenSSL-Win64\binからD:\ Apache24\confにコピーします。
D:\ Apache24\conf\httpd.confを編集します。
「c:/」を検索して「d:/」に置き換えます
「Listen 80」の後に「Listen 443」を追加して変更します。
Listen 80
Listen 443
これらの行のコメントを外します:
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
「#ServerName www.example.com:80」を次のように更新します。
ServerName myserver.mydomain:80
これを最後に追加します。
<IfModule socache_shmcb_module>
SSLSessionCache "shmcb:logs/ssl_scache(512000)"
</IfModule>
<VirtualHost *:80>
ServerName myserver
Redirect permanent / https://myserver.mydomain/
</VirtualHost>
<VirtualHost *:80>
ServerName myserver.mydomain
Redirect permanent / https://myserver.mydomain/
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile conf/server.crt
SSLCertificateKeyFile conf/server.key
ServerAdmin me@mydomain
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
ProxyPassReverse / http://myserver.mydomain/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
ポート8080でリッスンしているJenkinsを停止しなかったため、Apacheが失敗した場合でも接続できます。 httpsを使用する目的は、パラメーターを非表示にすることです。