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