[CentOS] 톰캣 설정 - server.xml(Host별 설정, 포트별 설정)
안녕하세요. 명월입니다.
이 글은 apache-tomcat의 server.xml에 설정에 대한 글입니다.
사실 제가 서버내에서 tomcat 설정을 잘못해서 재설정하면서 겸사겸사 글을 남깁니다.
윈도우 환경이나 Centos 환경 내이나 tomcat 서버 설정은 tomcat directory/config/server.xml에서 설정합니다.
처음 server.xml를 열면 아래 그림처럼 주석이 잔뜩 달려있습니다. 필요하신분은 그냥 냅둬도 됩니다만 저는 왠만하면 지웁니다. 왜냐하면 영어를 한글처럼 팍 들어오는 것도 아니고 괜히 가독성만 떨어집니다.
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
요렇게 깨끗하게 설정했습니다. 이제 제가 하려는 설정은 virtual-host 설정입니다.
사실 제가 처음에 apache없이 tomcat하나에 host명으로 분활해서 80포트에 나누려고 했습니다.
참고로 호스트 명으로 같은 포트에서 나누어 사용하려면 server의 host 태그를 추가하면 됩니다.
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- 호스트 추가 -->
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="nowonbun.tistory.com" appBase="webapps2" unpackWARs="false" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
그리고 톰캣이 있는 서버에 appBase에 설정한 이름으로 디렉토리를 만들고 서브로 ROOT 디렉토리를 만들고 그 안에 넣으면 됩니다.
이런 식으로 말입니다.
근데 이게 문제가 뭐가 생겼냐면 레드마인과 php를 설치하면서 어쩔 수 없이 apache2를 설치하게 되었습니다. 이러면서 자연스럽게 80포트를 빼앗겨 버렸고 80을 유지하기 위해서 apache-tomcat을 ajp 포트로 연결했습니다.
여기서 다시 ssl 설정, 즉 https 설정을 하면서 ajp포트가 제대로 인식을 안하는 문제가 발생했습니다. 사실 원인을 아직 못찾고 있습니다.ㅠㅠ
그래서 일단 빨리 해결할 수 있는 방법은 호스트 별로 서버를 나눌 필요가 없기 때문에 포트 별로 나누는 설정을 했습니다.
그러니깐 하나의 톰켓에서 여러 포트를 열어서 사용하는 것입니다.
사실 말이 길게 거창했지만 간단하게 저 Service를 여러개 만들면 가능해집니다.
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
<Service name="Catalina1">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" />
<Connector port="8011" protocol="AJP/1.3" redirectPort="8444" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps2" unpackWARs="false" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
참고로 포트가 겹치지 connection 포트와 ajp 포트와 redirectPort가 겹치지 않게 주의하시면 됩니다.
여기까지 톰캣 설정 - server.xml(Host별 설정, 포트별 설정)에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.