Tomcat에서 도메인 기반 가상 호스트를 구성하면 하나의 Tomcat 인스턴스로 여러 웹 애플리케이션(사이트)을 운영할 수 있습니다. 동일한 포트 또는 다른 포트를 사용할 수 있습니다.
(1). Tomcat 설정 파일은 conf 디렉토리에 위치합니다:
catalina.policy: Tomcat 보안 정책 파일입니다. 기본적으로 비보안 모드로 실행되며,-security매개변수를 추가하면 보안 모드로 전환됩니다.catalina.properties: Catalina의 설정 파일로, 보안 설정, 클래스 로더 설정, 스캔 제외 클래스 설정, 문자 캐시 설정 등 네 가지 주요 영역을 다룹니다.context.xml: Tomcat 6.0부터server.xml에서 분리되었으며, 데이터 소스(주로 데이터베이스 연결) 설정을 위해 사용됩니다. 동적으로 로드할 수 있습니다.jaspic-providers.xml: JASPIC 1.1 Maintenance Release B를 구현하며, 타사 JASPIC 인증 모듈을 통합합니다.jaspic-providers.xsd:jaspic-providers.xml에서 사용하는 XML 스키마를 정의합니다.logging.properties: 로깅 설정 파일입니다.server.xml: 주요 설정 파일로, 서비스 관련 매개변수(경로, 포트 등)를 정의합니다. 핫 리로드를 지원하지 않으므로 변경 후 Tomcat을 재시작해야 합니다.tomcat-users.xml: 사용자 정보 설정 파일로, Tomcat Manager에서 사용됩니다.tomcat-users.xsd:tomcat-users.xml의 XML 스키마를 정의합니다.web.xml: 모든 웹 애플리케이션의 기본 설정 파일입니다.
(2). 동일한 포트, 하나의 Tomcat으로 여러 애플리케이션 배포
1) server.xml 수정
[root@server ~]# vim /usr/local/tomcat8.5/conf/server.xml
// 기존 <Host> 태그 뒤에 새 <Host> 태그를 추가합니다. 모든 <Host>는 <Engine> 태그 내에 위치해야 합니다.
<Host name="www.example1.com" appBase="/var/www">
<Context path="" docBase="/var/www/example1"/>
</Host>
<Host name="www.example2.com" appBase="/var/www">
<Context path="" docBase="/var/www/example2"/>
</Host>
설명: <Host> 태그의 name은 도메인 이름을, appBase는 애플리케이션의 기본 디렉토리(배포 디렉토리)를 지정합니다. 경로는 절대 경로이거나 Tomcat 설치 디렉토리를 기준으로 한 상대 경로일 수 있습니다. <Context> 태그의 path는 가상 디렉토리를 지정하며, 빈 값이면 루트(/)를 의미합니다. docBase는 실제 파일 위치를 지정하며, appBase를 기준으로 한 상대 경로일 수 있습니다.
2) 테스트 페이지 생성
[root@server ~]# mkdir -p /var/www/{example1,example2}
[root@server ~]# echo "This is One." > /var/www/example1/index.html
[root@server ~]# echo "This is Two." > /var/www/example2/index.html
Tomcat 재시작:
[root@server ~]# ps aux | grep "/usr/local/tomcat8.5"
root 1833 98.0 5.8 2256888 57996 pts/0 Sl 11:44 0:02 /usr/local/jdk1.8.0_191/bin/java ...
[root@server ~]# kill -9 1833
[root@server ~]# /usr/local/tomcat8.5/bin/startup.sh
Tomcat started.
3) 테스트
Windows의 hosts 파일(C:\Windows\System32\drivers\etc\hosts)에 다음을 추가하여 DNS를 시뮬레이션합니다:
192.168.5.101 www.example1.com
192.168.5.101 www.example2.com
브라우저에서 확인합니다.
(3). 다른 포트, 하나의 Tomcat으로 여러 애플리케이션 배포
1) server.xml 수정
[root@server ~]# vim /usr/local/tomcat8.5/conf/server.xml
// <Service> 태그 내 <Connector> 태그를 복사하여 포트 번호를 수정합니다.
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
// <Engine> 태그 내에 <Host> 태그를 추가합니다. 각 <Host>에 포트 속성이 추가됩니다.
<Host name="www.example3.com" appBase="/var/www" port="8081">
<Context path="" docBase="/var/www/example3"/>
</Host>
<Host name="www.example4.com" appBase="/var/www" port="8082">
<Context path="" docBase="/var/www/example4"/>
</Host>
동일 포트 설정과의 차이점은 <Host> 태그에 port 속성이 추가된 점입니다.
2) 테스트 페이지 생성
[root@server ~]# mkdir -p /var/www/example{3,4}
[root@server ~]# echo "This is Three" > /var/www/example3/index.html
[root@server ~]# echo "This is Four" > /var/www/example4/index.html
Tomcat을 재시작합니다:
[root@server ~]# ps aux | grep "/usr/local/tomcat8.5"
root 2345 0.9 9.8 2325048 98620 ? Sl 12:11 0:11 /usr/local/jdk1.8.0_191/bin/java ...
[root@server ~]# kill -9 2345
[root@server ~]# /usr/local/tomcat8.5/bin/startup.sh
Tomcat started.
방화벽이 활성화된 경우 포트를 추가합니다:
[root@server ~]# systemctl start firewalld.service
[root@server ~]# firewall-cmd --permanent --zone=public --add-port={8081,8082}/tcp
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]# firewall-cmd --permanent --zone=public --list-ports
8080/tcp 8081/tcp 8082/tcp
3) 테스트
Windows의 hosts 파일에 다음을 추가합니다:
192.168.5.101 www.example3.com
192.168.5.101 www.example4.com
브라우저에서 확인합니다.
참고: 전체 <Service> 태그를 복사하여 수정할 수도 있습니다.