JenkinsおよびSonarのSSLを使用したApacheリバースプロキシ設定の修正


11

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
[...]

これは、サーバーでSSLを有効にしたにのみ表示されます(現在、自己署名証明書を使用しています)。

質問: Jenkinsが満足するように、リバースプロキシのセットアップを修正するにはどうすればよいですか?Apacheの設定ファイルを改善する方法に関するヒントのボーナスポイント。

次の2つの関連する質問を既に確認しました。

回答:


9

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>

2
素晴らしい、それは完璧に機能しました!私もやっていたsudo a2enmod headersそうでなければ、私はなるだろう、Invalid command 'RequestHeader'
friederbluemle

ProxyPassReverse同じパス(/)に2つのディレクティブを使用している理由を説明できますか?
オルトマラロクニ

1

Jenkins用のWindows Apacheフロントエンドのセットアップ

主な違いは次のとおりです。

  • 一時証明書をセットアップする方法
  • SSLキャッシュがないことに関する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を使用する私の目的は、パラメーターを非表示にすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.