docker-compose에서 리버스 프록시의 동작을 시도했습니다.

개요



지금은 그대로입니다만, apache의 리버스 프록시의 동작을 확인하고 싶고, docker-compose로 환경을 만들어 시험해 보았다.

구성





proxy(Ubuntu): 172.30.0.3
webapp(Ubuntu): 172.30.0.2

proxy와 webapp의 두 컨테이너를 세우고 호스트에서 webapp에 직접 액세스하지 않고,
호스트에서 프록시에 액세스하여 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

프록시의 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/부하 요청
htp://172.30.0.2/아래p/
로 전송합니다.

동작 검증


# 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"

좋은 웹페이지 즐겨찾기