RSS

日別アーカイブ: 2012/11/08

Jenkins、Sonatype nexus を Apache のリバースプロキシ経由で使う

Java開発をしているプロジェクトでは、CIにJenkins、Mavenリポジトリ管理にSonatype Nuxusを使っている人が多いと思います。
ていうか、使うとすごく開発効率上がるので使うべき。
で、私も両方使っているのですが、これらをApacheのバックで使う時微妙にはまることがあるのでその辺の話。

面倒が起きるのは、Apacheをフロントに置いてそのバックにJenkins、NexusをTomcatなどのJavaEEサーバにデプロイして動かす場合。
中でも、URLをいろいろ弄りたい場合。
例えば、http://example.com/foo/jenkins とか、標準の http://example.com/jenkins とは違うURLにした場合うまく動かない。
Tomcatとかに Jenkins とか Nexus の war を突っ込むと、/jenkins、/nexus というパスでアクセスできるようになる。
これを、http://example.com/foo/jenkins したければ、Apacheのリバースプロキシを設定します。
つまり、/foo/jenkins へのアクセスをTomcatの /jenkins にパスするという設定をします。
これ自体はApacheのmod_proxy設定を素直にやればいいのですが、リンクを踏んだとき /foo/jenkins じゃなく /jenkins に飛んじゃったり、Cookieが /jenkins に対して発行されて動作がおかしくなったりいろいろ問題が発生します。
その辺を解決するための設定が以下。

  • JenkinsのApache設定
  • ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass /foo/jenkins/ http://localhost:8080/jenkins/
    ProxyPassReverse /foo/jenkins/ http://localhost:8080/jenkins/
    Header edit Location ^http://example.com/jenkins/ http://example.com/foo/jenkins/
    <Proxy "http://localhost:8080/jenkins/*">
      Order Deny,Allow
      Allow from all
    </Proxy>
    
  • NexusのApache設定
  • ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass /foo/nexus/ http://localhost:8080/nexus/
    ProxyPassReverse /foo/nexus/ http://localhost:8080/nexus/
    ProxyPassReverseCookiePath /nexus /foo/nexus
    <Proxy "http://localhost:8080/nexus/*">
      Order Deny,Allow
      Allow from all
    </Proxy>
    

    Jenkinsは、クライアントに返すLocationヘッダを書き換えて正しいURLに飛ぶようにしてやります。
    Nexusは、Nexus自身の設定の中にURLの設定があるので、Locationヘッダをいじったりしなくてもいいのですが、Cookieが /nexus に対して発行されるのでログインができなかったりする。
    これを ProxyPassReverseCookiePath にマップを定義することで正しいパスに対して Cookie を設定します。

    意外とこの辺情報が見当たらなかったので、少しは役に立つかと思いまとめてみました。

     
    コメントする

    投稿者: : 2012/11/08 投稿先 java