우분투 서버 18.04 LTS에서 아파치와 톰캣9를 설치하고, 톰캣에 디플로이한 war 어플리케이션을 아파치를 경유해서 버츄얼 호스트로 접속하도록 아파치와 톰캣을 연동하는 방법을 설명한다.
톰캣만 써도 잘 되는데 왜 아파치를 경유하냐하면, 아파치에서 워드프레스 등 다른 서비스를 돌리고 있어서 톰캣도 같은 입구(아파치)를 통해서 외부로 연결되는 설정을 하는게 관리하기 편해서 그렇다.
딱히 아파치가 필요하지 않은 경우에는 그냥 톰캣만 기동해서 사용해도 된다.
아파치 톰캣9 설치와 모드 설정
설치는 아래 커맨드 한방으로 간단하게 끝.
1 |
sudo apt install apache2 tomcat9 |
아파치 모드 proxy 와 proxy_ajp 를 활성화한다.
1 2 |
sudo a2enmod proxy sudo a2enmod proxy_ajp |
proxy_ajp는 mod_jk 대신 사용하는건데 mod_jk는 따로 설치해야 되지만 proxy_ajp는 기본 설치된 모드이기 때문에 편하다. 복잡한 워커 설정도 필요없고.
아파치 site-available conf 설정
버츄얼 호스트 설정을 작성하기 위해서 /etc/apache2/site-available 디렉토리에 test.conf 파일을 생성한다. 내용은 아래처럼 작성.
1 2 3 4 5 6 7 8 9 10 11 12 |
<VirtualHost *:80> ServerName test.elmi.page ServerAdmin test@elmi.page DocumentRoot /home/elmi/webapps/test <Directory /home/elmi/webapps/test> Require all granted </Directory> <Location / > ProxyPass ajp://localhost:8009/ Require all granted </Location> </VirtualHost> |
80 포트로 들어오는 요청에 대해서 서버이름은 test.elmi.page, 디렉토리 /home/elmi/webapps/test 에 대한 접근 모두 허용(Require all granted)
http://test.elmi.page 루트 / 를 AJP 프로토콜로 localhost:8009 로 넘긴다. localhost:8009 는 톰캣에서 AJP 프로토콜로 열어둘 주소/포트.
서브도메인을 추가하고 싶은 경우에는 conf 파일을 복사해서 다른 도메인/디렉토리로 설정하면 된다.
conf 파일을 수정한 경우에는 아래 커맨드로 적용하자.
1 2 |
sudo a2ensite test.conf sudo service apache2 reload |
서비스 리로드에서 에러가 났을 경우에는 아래 커맨드로 내용 확인.
1 |
sudo journalctl -xe |
톰캣 server.xml 설정
톰캣의 server.xml을 편집한다. 위치는 /etc/tomcat9/server.xml
아래 8080 포트로 HTTP 연결은 아파치를 통해서 AJP 연결을 할 경우에는 필요 없으니 주석처리하자. (주석처리 안해도 딱히 지장 없음)
1 |
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> |
주석처리 된 프로토콜 AJP/1.3 부분을 찾아서 주석에서 해제.
1 |
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> |
호스트 설정에서 appBase 부분을 아파치에서 설정한 DocumentRoot, Directory와 맞추고, 디폴트로 사용되는 localhost 부분은 남겨두고 별도로 Alias로 서브도메인을 넣어둔다.
1 2 |
<Host name="localhost" appBase="/home/elmi/webapps/test" unpackWARs="true" autoDeploy="true"> <Alias>test.elmi.page</Alias> |
appBase 디렉토리(/home/elmi/webapps/test)에 ROOT.war 파일을 넣으면 자동으로 ROOT 디렉토리에 압축을 풀어서 디플로이 될 것이다. ROOT.war 파일을 사용하면 http://test.elmi.page/ 도메인 루트로 접속하도록 되는것이고, ROOT.war 이외에 이름 예를 들면 hoge.war 라는 war 파일을 사용하면 http://test.elmi.page/hoge/ 로 접속해야 한다.
서브도메인을 추가하고 싶은 경우에는 Host 태그를 복사해서 name을 name=”test2.elmi.page” 처럼 서브도메인 이름으로 넣으면 된다. 물론 appBase는 다른 곳으로 지정할것.
server.xml 파일을 수정했으면 서버 재기동해서 적용하자.
1 |
sudo service tomcat9 restart |
아파치 로그는 /var/log/apache2, 톰캣 로그는 /var/log/tomcat9 에서 확인 가능하니 뭔가 제대로 안되면 로그 파일을 확인하면 된다.
conf 파일이나 xml 파일 수정 후에 리로드, 재기동하면 에러가 나는 경우는 파일의 문법상 문제이기 때문에 금방 찾아서 고칠 수 있다.
접속 테스트
브라우저로 확인해도 되지만, 내가 쓰는 page 도메인은 SSL 인증서를 발급 받지 않으면 브라우저로 확인이 불가능해서 wget 으로 에러 없이 index.html 파일이 제대로 보이는지 확인했다.
1 |
wget test.elmi.page |
404 에러가 잘 나올텐데 아파치 access 로그부터 확인해서 연결이 잘 들어오고 있나 확인하자. 아파치에 문제가 없으면 그 다음은 톰캣의 억세스 로그를 보면 된다.
주로 디렉토리 경로가 잘못된 경우가 많으니 아파치의 conf 파일과 톰캣의 server.xml 에서 디렉토리 경로를 다시 잘 확인해 보자.