server.xml 을 open
4월 30일 hosts 변경 후, 특정 ip로는 접속이 안되는 서버가 있어,
원일을 찾다가 발견했습니다.
단순히, defaultHost 설정이 버추얼 호스팅 주소와 맞지 않았기 때문입니다.
특정 아이피로 호출 했을 경우, 접속되는 아이피는 자동으로 defaultHost 로 변경되게 됩니다.
그런데 vim /etc/hosts 에도 없을 경우에는 톰캣에서 해당 IP를 찾지 못했다고 판단하여 팅겨내게 됩니다.
/etc/hosts 에 없을 경우 server.xml Alias 에라도 등록해두면, 처리됩니다.
<Engine name="Catalina" defaultHost="www.testtest.com">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="www.testtest.com" appBase="webapps" unpackWARs="true" autoDeploy="false">
<Context path="" docBase="/home/xxx/public_html" reloadable="false" workDir="/home/xxx/public_html/WEB-INF/work"/>
<Alias>01.testtest.com</Alias>
<Alias>02.testtest.com</Alias>
<Alias>01.test001.com</Alias>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/home/xxx/logs/tomcat" prefix="openrtb03.mediacategory.com-access.log-" suffix="" pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %Dms "IP_info: %{IP_info}c ,Start_Time: %{Start_Time}c"" fileDateFormat="yyyyMMdd-HH" resolveHosts="false" />
</Host>
</Engine>
Engine
defaultHost : Host[name]과 일치하지 않는 호스트로 접속시 기본값으로 대처할 호스트입니다.
예를 들어 서버 아이피로 접속했을 경우 자동으로 defaulthost로 변경되게 됩니다.
예제 샘플으로 쉽게 설명하자면,
<Engine name="Catalina" defaultHost="localhost">
...
<Host name="localhost" appBase="webapps" unpackWARs="true" 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>
개인 PC에서 테스르를 위해, 127.0.0.1 로 접속한 경우 아래 Host[name]에는 localhost 밖에 없어 일치하는 것이 없지만 기본값 localhost를 보고 localhost로 할당하게 됩니다.
Host
name : 호스트 이름입니다. 예를들어서 도메인이름 gs.saro.me 로 접속한경우 Host[name]이 gs.saro.me 인것을 찾고 없으면 위 설명처럼 Engine[defaultHost]의 값으로 접속합니다. appBase : 기본 경로입니다. 예를들어 webapps 라면 [톰켓기본경로/webapps] 를 기본으로 접속하게됩니다. autoDeploy(자동 디플로이) : autoDeploy는 속성값이 true로 자동으로 설정됩니다. 빈번하게 재시작하면 안되는 서버의 경우는 무조건 false 로 설정하셔야합니다.
Valve
호스트 접속시 영향을 주는 것들이라고 보면됩니다.
RemoteAddrValve 같이 IP 필터같은 필터 역활을 하는 것도있고 종류도 다양합니다.
AccessLogValve 같은 로그를 남기는 기능도 있습니다. 해당 로그를 남길때는 헤더정보까지 같이 남길수 있어 매우 편리합니다.