概要
今更ながらですが、apacheのリバースプロキシーの動作を確認してみたく、docker-composeで環境を作って試してみた。
構成
proxy(Ubuntu): 172.30.0.3
webapp(Ubuntu): 172.30.0.2
proxyとwebappの二つのコンテナを立て、ホストからwebappに直接アクセスせず、
ホストからproxyにアクセスして、webappの表示ができるか確認する。
<?php phpinfo();?>
ツリー構成
test
|--docker-compose.yml
| |--proxy
| | |--Dockerfile
| | |--apache2.conf
| | |--entrypoint.sh
| | |--node.conf
|--vol # /etc/apache2のマウント
| |--apache2.conf
| |--conf-available
| |--conf-enabled
・・・
|--www # webappのマウント
| |--app
| | |--index.php
実装
docker-compose.yaml
version: '3'
services:
app:
image: php:7.2.11-apache
tty: true
volumes:
- ./www:/var/www/html
ports:
- 80:80
networks:
app_net:
ipv4_address: 172.30.0.2
proxy:
build: ./docker/proxy
tty: true
ports:
- 81:80
# apacheのディレクトリマウント
volumes:
- vol:/etc/apache2/
networks:
app_net:
ipv4_address: 172.30.0.3
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.30.0.0/24
volumes:
vol:
driver_opts:
type: none
device: ${PWD}/vol
o: bind
proxyのDockefile
FROM php:7.2.11-apache
ADD ./node.conf /etc/apache2/conf-enabled
ADD ./apache2.conf /etc/apache2
RUN mkdir /work
WORKDIR /work
ADD ./entrypoint.sh /work
# proxyモジュールの有効化
RUN a2enmod proxy && \
a2enmod proxy_http
RUN apt-get update && \
apt-get install build-essential checkinstall
# sourceを使えるように一時的にbashを使う設定
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN source /etc/apache2/envvars
CMD ["/bin/bash", "entrypoint.sh"]
entrypoint.sh
CMD ["apachectl", "-D", "FOREGROUND"]で実行すると
起動時にエラーになるため、起動時シェルに移した。
#!/bin/bash
apachectl -D FOREGROUND
node.conf
/etc/apache2/conf-enabledに配置する。配置は、dockerfileで実施する。
ProxyRequests Off
ProxyPass /app/ http://172.30.0.2/app/
ProxyRequests: リバースプロキシの設定
ProxyPass: 指定したリクエストを転送する。上記だと、/app/配下のリクエストを
http://172.30.0.2/app/
に転送する。
動作検証
# proxy側のログ *httpd.confのloglevelをdebugにした時のログ
[proxy:debug] [pid 11] proxy_util.c(2209): [client 172.30.0.1:48208] AH00944: connecting http://172.3
0.0.2/app/index.php to 172.30.0.2:80
# app側のログ
172.30.0.3 - - [26/Jun/2019:06:34:48 +0000] "GET /app/index.php HTTP/1.1" 200 24777 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"