코딩마을방범대
우분투에서 Apache를 이용해 WAS 연동하기 본문
웹서버(Apache)와 미들웨어(Tomcat) 연동하기
연동 방법 세가지
AJP
Apache 웹서버가 외부 시스템과 연동하기 위한 프로토콜
연결 방식 | 장점 | 단점 |
mod_jk | - Tomcat Connector를 사용하는 방식 - 가장 많이 사용해온 방식 - mod_jk 관련 자료가 많음 - JKMount 옵션을 이용하면 URL이나 컨텐츠 별로 유연한 설정 가능 |
- 별도의 모듈 설치 필요 - 설정이 어려움 - Tomcat 전용 - apache와 tomcat간의 2진 패킷 전송 크기가 64kb |
mod_proxy | - Reverse Proxy 기능을 사용하는 방식 - 별도 모듈 설치를 필요로 하지 않음 - 특정 WAS에 의존적이지 않음 |
- URL에 따른 유연한 설정이 어려움 - apache와 tomcat간의 2진 패킷 전송 크기가 8kb (비교적 성능이 떨어짐. 하지만 apache2.4 부터 성능 차이가 크게 없다고함) |
mod_proxy_ajp | - AJP Protocol을 Reverse Proxy로 사용하는 방식 - 별도 모듈 설치를 필요로 하지 않음 - 특정 WAS에 의존적이지 않음 |
- URL에 따른 유연한 설정이 어려움 - HTTP를 사용하는 대신 AJP 프로토콜의 속도 이점과 함께 mod_proxy의 모든 제어 및 (상대적으로) 구성 용이성과 함께 제공 됨 |
사용 방법
mod_jk
1. mod.jk 설치하기
( install 전 apt 업데이트 )
$ sudo apt-get update
$ sudo apt-get install libapache2-mod-jk
2. 아파치 설치 경로에 새로 설정 파일을 만들어 사용
( mod_jk 설치 시 기본으로 생기는 설정 파일말고 별도 생성 /etc/libapache2-mod-jk/workers.propertie )
$ sudo vi /etc/apache2/workers.properties
내용
workers.tomcat_home=/var/lib/tomcat9 #톰캣 설치경로
workers.java_home=/usr/lib/jvm/java-8-openjdk-amd64 #JDK 설치경로
worker.list=[워커이름]
worker.[워커이름].port = 8009
worker.[워커이름].host = was 서버 주소 # or localhost
worker.[워커이름].type = ajp13
worker.[워커이름].lbfactor = 1
패키지 설치 경로 찾기
$ whereis java
3. jk.conf 파일에 workers.proerties 기본경로를 아파치 홈으로 변경
( 아래 위치에 파일이 없을 경우 그냥 생성 )
$ sudo vi /etc/apache2/mods-available/jk.conf
내용
<IfModule mod_jk.c>
# JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkWorkersFile /etc/apache2/workers.properties
JkLogFile /var/log/apahce2/mod_jk.log
JkLogLevel Info
JkOptions +ForwardURlCompatUnparsed
</IfModule>
4. 아파치 환경 가상호스트 설정하기
※ jsp, json 등을 톰캣이 처리하고 다시 아파치로 전달해주고 이 외에는 아파치가 담당하게 되기 때문에
tomcat을 stop 시키면 html 은 되고 jsp파일은 연결이 안됨
아파치를 stop 시키면 jsp,html 둘 다 안됨
$ sudo vi /etc/apache2/sites-available/000-default.conf
내용
ServerAdmin webmaster@localhost
# DocumentRoot /var/www/html
# DocumentRoot: [아파치 홈 경로]
DocumentRoot /var/lib/tomcat9/webapps/ROOT/
# JkMount /* [워커이름]
JkMount /*.jsp [워커이름]
JkMount /*.json [워커이름]
JkMount /*.xml [워커이름]
JkMount /*.do [워커이름]
5. AJP 프로토콜 설정
$ sudo vi /etc/tomcat9/server.xml
내용
<!-- Define an AJP 1.3 Connector on port 8009 -->
(주석 제거)
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
6. 톰캣과 아파치 재시작
$ sudo service apache2 restart
$ sudo service tomcat9 restart
mod_proxy
1. mod_proxy 모듈 활성화
( 순서대로 전부 실행 )
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo a2enmod proxy_balancer
$ sudo a2enmod lbmethod_byrequests
2. 역방향 프록시를 활성화하도록 기본 구성 수정
$ sudo vi /etc/apache2/sites-available/000-default.conf
내용 ( 단일 백엔드 서버 )
※ ProxyPass, ProxyPassReverse 주소 입력 시 마지막에 / 를 꼭 붙여야함
<VirtualHost *:80>
...
ProxyPreserveHost On
ProxyPass / [was서버주소]
ProxyPassReverse / [was서버주소]
</VirtualHost>
ProxyRequests | Forward Proxy 경우 On / Reverse Proxy Off |
ProxyPreserveHost | 호스트가 받은 HTTP 요청을 Proxy 요청시 사용 |
ProxyPass | Proxy에 연결할 URL ServerHost-> Apache -> ProxyPass URL |
ProxyPassReverse | WAS 가 redirect HTTP 응답을 보냈을 경우 Location, Content-Location HTTP 헤더를 수정 클라이언트에 전달 reverse proxy가 이 헤더를 수정하지 않으면 클라이언트는 redirect 시 제대로 연결할 수 없으므로 꼭 설정해야 함 |
내용 ( 여러 백엔드 서버 )
<VirtualHost *:80>
...
# 추가할 주소가 있다면 초록색 부분의 이름을 변경하여 추가하면 됨
<Proxy balancer://[주소별명]>
BalancerMember [was서버주소]
BalancerMember [was서버주소]
</Proxy>
ProxyPreserveHost On
ProxyPass / balancer://[주소별명]/
ProxyPassReverse / balancer://[주소별명]/
</VirtualHost>
3. 아파치 재시작
$ sudo service apache2 restart
참고사이트
Apache/Tomcat 연동 (mode proxy 방식)
아파치 ↔ 톰캣 - Reverse Proxy 환경 구축 방법
Ubuntu 16.04에서 mod_proxy와 함께 Apache를 리버스 프록시로 사용하는 방법
'💡 백엔드 > 우분투' 카테고리의 다른 글
Docker 이미지 생성하기 (0) | 2023.09.05 |
---|---|
우분투에서 Docker 사용하기 (0) | 2023.09.04 |
우분투 패키지 재설치 시 정상적으로 설치가 되지 않을 경우 (0) | 2023.06.12 |
우분투에서 Nginx 구축 (0) | 2023.06.12 |
우분투 Apache2 실행 오류 (0) | 2023.06.12 |