Tomcat에서 도메인 기반 가상 호스트 구성하기

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> 태그를 복사하여 수정할 수도 있습니다.

태그: Tomcat 가상호스트 DNS시뮬레이션 server.xml 웹서버

7월 22일 06:25에 게시됨