2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

 

« 株:現物買い約定(三菱商事) | トップページ | オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その2 »

2015年11月 7日 (土)

オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その1

手軽にCI(redmine,Jenkins,gitlab)を行える環境をdockerで作っていて、IFを一つで管理しようとリバースプロキシを使おうとしているのだけれど、イマイチうまくいかない。
Apache HTTP Serverをリバースプロキシとして使用するには、mod_proxyモジュール使うが、これだけでは相対パスを解決できないようで、以下のようにCSSやjpgが読み込めないし、リンク先に飛べない。

Readmine_ng_2

Jenkins_ng_2

Gitlab_ng_2

httpd.confは以下。

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
<Location /jenkins/>
    ProxyPass http://ci_jenkins:8080/
    ProxyPassReverse http://ci_jenkins:8080/
    RequestHeader    unset  Accept-Encoding
</Location>
<Location /redmine/>
    ProxyPass http://ci_redmine/
    ProxyPassReverse  http://ci_redmine/
    RequestHeader    unset  Accept-Encoding
</Location>
<Location /gitlab/>
    ProxyPass http://ci_gitlab/
    ProxyPassReverse  /
    RequestHeader    unset  Accept-Encoding
</Location>

このときApache HTTP Serverのアクセスログを見ると、以下のようにHTTPは読み込めるが、CSSやJSファイルは、HTTP レスポンスコード404(未検出。見つからない。)となる。

192.168.99.1 - - [05/Nov/2015:14:12:06 +0000] "GET /redmine/ HTTP/1.1" 200 1397
192.168.99.1 - - [05/Nov/2015:14:12:07 +0000] "GET /stylesheets/application.css HTTP/1.1" 404 225
192.168.99.1 - - [05/Nov/2015:14:12:07 +0000] "GET /stylesheets/jquery/jquery-ui-1.11.0.css HTTP/1.1" 404 237
192.168.99.1 - - [05/Nov/2015:14:12:07 +0000] "GET /javascripts/jquery-1.11.1-ui-1.11.0-ujs-3.1.3.js HTTP/1.1" 404 246
192.168.99.1 - - [05/Nov/2015:14:12:07 +0000] "GET /javascripts/application.js HTTP/1.1" 404 224

Webブラウザに指定したURLは「http://192.168.99.100/redmine/」で、HTMLには相対パスでしていされているので、組み合わさって絶対パスになるのかと思っていたのに・・・。
相対パスでも"/"で始まっている場合は、ルートトップからの相対ということで、ホストに対して相対パスがくっつくので、リバースプロキシで変換するURLにはならない。(http://192.168.99.100/redmine/~ と期待しているのに/redmine/が付かない)

といわけで、dockerで3つのWebアプリケーション(redmine,Jenkins,gitlab)を使うケースで、Apache HTTP Serverのリバースプロキシを使うにはmod_proxy(redmine,Jenkins,gitlab)だけでは解決できない。
・・・と思う。
1つだけWebアプリケーションを使うならば、パスを追加しなければいいので、使えるのだけれど。
(VirtualHostでホスト名を分ける方法で解決している人もいるけど、どこにあったか分からんようになってもーた)

ではどうするかというと、mod_proxy_htmlモジュールを使ってみた。ただし、問題あり。
→次の記事に続く。

■備考:
HTTP RequestとかResponseの問題なのかなーと思って少し探ってみたけど、当て外れ。
調べたことを備忘として書いておく。

HTTP ResponseのHTTP Headerについて、URLに関係しそうなもの。

  • Location:リダイレクトするときに使用。HTTP Response Code 30xを返して Locationに指定した絶対URIに移動する。
  • Content-Location:使用していない。

« 株:現物買い約定(三菱商事) | トップページ | オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その2 »

コメント

コメントを書く

(ウェブ上には掲載しません)

« 株:現物買い約定(三菱商事) | トップページ | オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その2 »