オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その2
というわけで、dockerでredmine,Jenkins,gitlabを動かし、Apache HTTP Serverをリバースプロキシにして外部IFとするわけですが、パスでWebアプリを区別する方式をとるとmod_proxyだけでは相対パスが解決できないのですよ。
それを解決するにはパスに対して、Webアプリごとのパスを追加する必要があるわけで。
mod_proxy_htmlモジュールを使います。
Apache HTTP Serverのdockerイメージは bitnami/apache を使っていますが、これにはmod_proxy_htmlモジュールは入っていません。ですので、以下の手順でモジュールをインストールし使えるようにしたdockerコンテナをdockerイメージにします。(先頭$がVM、#がdockerコンテナ)
※:bitnami/apacheを起動してから以下のコマンドを実行してください。
$ a=`docker ps | grep apache | awk '{print $1}'`
$ docker exec -it $a bash
# apt-get update
# sudo apt-get install libapache2-mod-proxy-html
# apt-get install libxml2-dev
# cd /opt/bitnami/apache2/modules/
# ln -s /usr/lib/apache2/modules/mod_proxy_html.so
# ln -s /usr/lib/apache2/modules/mod_xml2enc.so
# exit
$ docker commit $a apache_rp
httpd.confに以下のように定義
LoadFile /opt/bitnami/common/lib/libxml2.so
ProxyRequests Off
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule xml2enc_module modules/mod_xml2enc.so
<Proxy *>
Order deny,allow
Allow from all
</Proxy> <Location /jenkins/>
ProxyPass http://ci_jenkins:8080/
ProxyPassReverse http://ci_jenkins:8080/
ProxyHTMLEnable On
ProxyHTMLURLMap / /jenkins/
RequestHeader unset Accept-Encoding
</Location> <Location /redmine/>
ProxyPass http://ci_redmine/
ProxyPassReverse http://ci_redmine/
ProxyHTMLEnable On
ProxyHTMLURLMap / /redmine/
RequestHeader unset Accept-Encoding
</Location> <Location /gitlab/>
ProxyPass http://ci_gitlab/
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /gitlab/
RequestHeader unset Accept-Encoding
</Location>
上記の設定を行うことで、相対パスの問題はとりあえず解決できる。
取り敢えずというのは、一部リンクがおかしくなったりします。たとえばRedmineのログインで/redmine/redmine/と2重に設定されたりします・・・。あと、Jenkinsの設定でリバースプロキシがおかしいとか出ます。
ここら辺は、今後の課題ということで。
« オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その1 | トップページ | 株:現物売り約定(NSD) »
« オイラ、dockerしてるぜ dockerでリバースプロキシを使用しようとしているのだけれど その1 | トップページ | 株:現物売り約定(NSD) »
コメント