LoginSignup
1
2

More than 3 years have passed since last update.

docker-composeでリバースプロキシの動作を試してみた

Last updated at Posted at 2019-06-17

概要

今更ながらですが、apacheのリバースプロキシーの動作を確認してみたく、docker-composeで環境を作って試してみた。

構成

snap-appache-proxy.png

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"
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2