...
아파치 Reverse Proxy 환경 구축
Proxy는 Forward / Reverse Proxy 두가지가 있는데,
보통 Forward Proxy는 사내망 Client에서 외부에 있는 웹서버를 접근할 때 사용되며(미리 Proxy 지정이 필요함),
Reverse Proxy는 Client에서 웹서버에 접근 할 때, 내부망에 위치한 WAS서버를 대신하여 요청한 Request에 대해 Response를 하는 구조이다.
아파치와 톰캣에 리버스 프록시(reverse proxy) 환경을 구축하는 이유는 톰캣에 올린 웹 서비스의 서버 ip를 외부 사용자로부터 감추기 위한 것이며(보안), 로드밸런싱 기능으로 트래픽 분산을 하여 서버의 가용성을 유지하기 위해서 인프라를 구성하기 위해서 이다.
* Reverse Proxy에 대해 자세한 원리를 알고 싶다면 다음 포스팅을 참고 바란다.
아파치(Web Server)와 톰캣(WAS)의 리버스 프록시 구성으로는 아래 그림과 같이, 외부 컴퓨터에 아파치(Apache) 서버를 두고, 그 아파치가 톰캣 서버 IP를 가리키게 해서 구성하는 편이다.
물론 아파치 톰캣 자체에도 아파치(apache)의 기능이 들어있어 web server 기능을 이용할 수 있지만, 리버스 프록시(Reverse Proxy) 환경을 만들기 위해서는 내장된 아파치로는 구성이 불가능하다.
따라서 본 강의에서의 실습은 다음과 같이 진행할 예정이다.
- 내 컴퓨터에 톰캣을 설치하고
- Oracle Virtual Box에 아파치(apache) 서버를 깔아
- 아파치 서버에서 내 컴퓨터의 톰캣 서버를 가리키도록 프록시 설정 할 예정이다.
내 컴퓨터에 톰캣 설치
톰캣 구성과 설치 방법은 다음 포스팅을 참고하길 바란다.
가상 머신에 아파치 (Apache) 서버 설치
아파치 구성과 설치 방법은 다음 포스팅을 참고하길 바란다.
아파치 프록시 설정하기
아파치 연동 방식
Apache와 tomcat(WAS)를 연동하는 방법에는 크게 3가지 옵션이 있다.
예전부터 많이 쓰던 방법은 tomcat connector(mod_jk)를 사용하는 방법이고 다른 하나는 mod_proxy를 사용하여 reverse proxy 기능을 사용하는 방법, 마지막은 mod_proxy_ajp 를 사용하여 AJP Protocol을 reverse proxy 로 사용하는 방법이다.
mod_proxy 가 mod_jk 에 비해 설정이 간편하고 AJP 같은 특정 WAS 의존적인 프로토콜을 사용하지 않으므로 성능이 더 좋다고 한다.
연결 방식 | 장점 | 단점 |
mod_jk | - Tomcat Connector를 사용하는 방식 - 가장 많이 사용해온 방식 - mod_jk 관련 자료가 많음 - JKMount 옵션을 이용하면 URL이나 컨텐츠 별로 유연한 설정 가능 |
- 별도의 모듈 설치 필요 - 설정이 어려움 - Tomcat 전용 |
mod_proxy | - Reverse Proxy 기능을 사용하는 방식 - 별도 모듈 설치를 필요로 하지 않음 - 특정 WAS에 의존적이지 않음 |
- URL에 따른 유연한 설정이 어려움 |
mod_proxy_ajp | - AJP Protocol을 Reverse Proxy로 사용하는 방식 - 별도 모듈 설치를 필요로 하지 않음 - 특정 WAS에 의존적이지 않음 |
- URL에 따른 유연한 설정이 어려움 |
AJP: Apache 웹서버가 외부 시스템과 연동하기 위한 프로토콜
mode proxy 설정
우리는 Reverse Proxy 인프라 환경을 구축할 것이기에, mod_proxy 모듈을 이용해서 구성할 예정이다.
1. /apache/conf/httpd.conf 파일을 열어 mod_proxy 모듈 활성화
httpd.conf 파일을 열고 아래 모듈의 주석을 풀어준다. (httpd.conf의 경로는 설치에 따라 다를 수 있다.)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Include conf/extra/httpd-vhosts.conf
2. 그다음 /apache/conf/extra/httpd-vhost.conf 파일 열어 <VirtualHost *:80> 부분을 지우고 다음과 같이 편집해준다.
<VirtualHost *:80>
# Forward Proxy 경우 On / Reverse Proxy Off
ProxyRequests Off
# 호스트가 받은 HTTP 요청을 Proxy 요청시 사용
# Reverse 경우 On으로 해야함
ProxyPreserveHost On
# Proxy에 연결할 URL
# ServerHost:localhost -> Apache -> ProxyPass URL
ProxyPass / http://192.168.10.146:8080/service/ # 뒤에 슬래쉬는 붙여줘야함
# WAS 가 redirect HTTP 응답을 보냈을 경우 Location, Content-Location HTTP 헤더를 수정 클라이언트에 전달한다.
# reverse proxy가 이 헤더를 수정하지 않으면 클라이언트는 redirect 시 제대로 연결할 수 없으므로 꼭 설정해야 한다.
ProxyPassReverse / http://192.168.10.146:8080/service/
# 로드밸런싱 - 경로 분기
<Location /html>
ProxyPass http://192.168.10.146:8080/html/
ProxyPassReverse http://192.168.10.146:8080/html/
</Location>
<Location /user>
ProxyPass http://192.168.10.146:8080/user/
ProxyPassReverse http://192.168.10.146:8080/user/
</Location>
</VirtualHost>
3. 아파치 서버를 재시작 해준다.
C:\Apache24\bin > httpd.exe -k restart
이제 아파치 IP로 접속해보면, proxypass로 연결한 url로 로드밸런싱 될 것이다.
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.