Development note/Linux

[CentOS] 톰캣 설정 - server.xml(Host별 설정, 포트별 설정)

v명월v 2019. 6. 22. 01:40

안녕하세요. 명월입니다.


이 글은 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별 설정, 포트별 설정)에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.