본문 바로가기

개발/spring

[웹서버 ] apache2 - 멀티 tomcat8 연결하기

안녕하세요 . 이번에는 apache2 와 tomcat8 2대를 연결하는 작업을 진행 할 예정입니다

 

저희는 tomcat 2대를 운영해야하는 입장인데 서버를 물리적으로 추가해주기에 부담이되 한서버에서 a도메인은 tomcat서버 1번 , b도메인은 tomcat 서버 2번으로 연결하는 작업은 진행하였습니다. 이유는 앞에 설명드린 서버비용 하나의 tomcat에 두개의 도메인을 모두 사용할 경우 a 도메인의 업데이트 진행시 b도메인까지 사용을 못하는 부분을 해결하기 위해서 입니다. 

 

* 작업 환경 

서버 : ubuntu 20.04 LTS

웹서버 : apache2.4.29

WAS : tomcat8 2대 입니다

 

* 구성도

 

저는 apache와 톰캣을 연결하는 작업부터 시작해봤습니다.

이 작업은  외부에서 80포트로 요청할 경우 apache2에서 받아서 mod_jk (ajp13) 을 사용하여 tomcat8009 포트로 연결하는 작업입니다.

 

여러 글을 검색해서 진행해 본결과 

 

daisyleh.blogspot.com/2020/03/blog-post.html 이분의 글을 그대로 따라하면 연결이되는것 경험할수 있었습니다.

 

이걸 조금 변형해서 apache2 1대와 tomcat2 대를 연결해보려고했는데 저는 잘되지않아 apache proxy 기능을 사용하여 작업에 성공 하였습니다.

 

여기서 proxy라는건 Reverse proxy 인데요 외부 클라이언트의 요청을 proxy에서 받아 실제 서버로 대신 요청해주는 의미로 물리적 서버가 있는경우 내부 서버의 클라이언트가 직접접속하는것을 막아주는 보안적인 역활을 하지만 이런구성에서는 그런역활을 하기는 어렵다고 판단되며 2대의 tomcat을 연결해주는 역활만 하고있습니다.

 

1. vmware 우분투 설치 

2. 설치가 완료되면 root 패스워드를 설정해주세요  

sudo passwd root

 

3. 우분투 업데이트 

sudo apt-get update

 

4.아파치 설치 

sudo apt-get install apache2 

아파치는 설치후 바로 실행이 되기때문에 확인가능합니다

브라우저에서 localhost로 접속하면 아래와같이 표시됩니다

 

5.자바 설치 

sudo apt-get install openjdk-8-jdk

 

6. 톰캣 다운로드 

자신의 컴퓨터에서 크롬을 켠 후  tomcat8 download라고 검색한 후 tar.gz 를 우클릭한후 링크주소 복사 해주세요

그다음 다시 우분투로 돌아와서 wget을 사용해서 다운받을 수 있습니다. 만약 wget이 없다고 에러가 발생하면 

sudo apt-get install wget을 한후 진행해 주세요.

wget mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz

 

정상적으로 다운이 됬다면 아래와 그림과같이 보이면서 파일이 생성된 걸 볼수있습니다.

 

 

 

7.톰캣 압축 해제 후 파일명 변경 & 이동

생성된 파일이  저는 /home/test/Desktop 아래에 생겼습니다 . (각자 다를수있지만 거의 비슷할거에요 ) 

어디에 있는지 모르겠으면 sudo find / -name apache-tomcat* 이라고 검색보세요.

이제 순서가 압축해제 -> 폴더명 변경 ( tomcat8)  , 다시 압축해제 -> 폴더명 변경 (tomcat9) , 폴더 이동을 할 것입니다.

압축해제는 tar -zxvf apache-tomcat-8.5.65.tar.gz 입니다. 압축을 해재하면 똑같은 이름에 tar.gz가 제거된 파일이 생성될 것입니다.

 

이름변경은 mv ./apache-tomcat-8.5.65 ./tomcat8 입니다. 

 

똑같이 한번더 작업한후 파일명을 tomcat9로 바꾸겟습니다.

 

이제 이 두 파일을 원하는 위치로 옮길 예정입니다 . 저는 /usr/share/ 로 옮겼습니다. 안옮겨두되요.

 

8. 이제 tomcat1 과 tomcat2 의 접속 포트를 변경할 예정입니다. 두개를 동시에 운영하기때문에 포트가 중복되서는 안됩니다. tomcat1 은 건드리지않고 원래 포트 8080 , 8443 , 8005 를 사용하고 , tomcat2는 9080,9443,9005 로 변경할 것입니다.

sudo vi /usr/share/tomcat9/conf/server.xml 로 접근 후 두 곳을 변경해주세요 

 

이제 톰캣을 실행시켜보겟습니다.

 

sh /usr/share/tomcat8/bin/startup.sh

sh /usr/share/tomcat9/bin/startup.sh

 

서비스가 잘동작하는지 netstat -ntpl 로 확인할 수 있습니다 ( netstat 이없는경우 sudo apt-get install net-tools )

실제로 브라우저로 확인해 보려면 localhost:8080 or localhost:9080 으로 접속하시면 됩니다.

 

 

9. 이제 apache에서 proxy 기능을 추가해야 합니다. 

vi /etc/apache2/sites-enabled/000-default.conf

 기본적으로 한개의 VirtualHost *:80 이 존재할텐데  아래와 같이 한개를 더만들어주세요 

PRoxyPreserveHost On

ServerName domainA ( 아무거나 넣어두 됩니다 )

ServerAlias *.tomcat1.com ( 실제로 접근하는 도메인명을 넣어줘야합니다 , 저는 test.tomcat1.com or real.tomcat1.com 등으로 접근하기때문에 *을 사용하였습니다 )

ServerAdmin webmaster@localhost ( 건드리지않음)

DocumentRoot /var/www/html ( apache가 바라보는 기본 디렉토리 )

ProxyReqeusts off ( Proxy 기능을 on은 forward로  off는 Reverse로 , 저희는 Reverse로 사용 )

<Proxy *> 프록시 설정 우선순위 

Order deny,allow 

Allow from all

</Proxy>

 

ProxyPass / http://localhost:8080/  이부분에서 / 접근을 하면 localhost:8080/ 로 요청하겟다는 의미입니다.( 사용에따라 응용해서 사용하시면 됩니다 ) 

ProxyPassReverse / http://localhost:8080/

 

10.마지막으로 apache 에서 proxy를 enable해주고 restart해주면 끝이납니다.

일단 root로 접근한후 

->su

->a2enmod proxy

->a2enmod proxy_http

->a2enmod proxy_balancer

-> a2enmod lbmethod_byrequests

->exit

sudo service apache2 restart

 

작업은 종료되었고 확인해보겠습니다

저는 tomcat8 과 tomcat9에 각각 다른 war파일을 배포해놨습니다. 두곳 모두 Controller에  GetMapping("/test") 라 걸어놓고 jsp 파일만 약간씩 다르게 설정하였습니다.

 

일단 윈도우로 돌아와서 hosts 파일을 변경하겟습니다.

(참고로 제 윈도우는 우분투와 같은 네트워크입니다 hosts 만변경해도 우분투로 접근이 가능합니다 )

(hosts 경로 C:\Windows\System32\drivers\etc , 꼭 관리자 권한으로 실행하세요.   )

 

이제 test.tomcat1.com/test 로 들어가면 흰색 배경의 library 가 , test.tomcat2.com/test로 들어가면 검은 배경의 library가 보일 것입니다.

tomcat1

 

tomcat2

이상으로 마치겠습니다