코딩마을방범대

우분투에서 Apache를 이용해 WAS 연동하기 본문

💡 백엔드/우분투

우분투에서 Apache를 이용해 WAS 연동하기

신짱구 5세 2023. 6. 13. 14:37
728x90

 

 

Apache와 Nginx의 차이점 포스트

우분투에서 Nginx 구축하기 포스트

 


 

웹서버(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를 리버스 프록시로 사용하는 방법

 

 

 

 

728x90