Tomcat 에러 정보 숨기기
Java 애플리케이션을 작성할때에 에러 발생시 보여줄 에러 페이지를 설정할 수 있습니다. 웹 애플리케이션 설정 파일인 web.xml 파일에 다음과 같이 해줍니다.
1 2 3 4 5 6 7 8 |
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page> |
단순하게 HTTP 응답코드 뿐만 아니라 Java Exception 객체에 따른 에러도 설정할 수 있습니다.
1 2 3 4 5 6 7 8 |
<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error/exception.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/servlet/ErrorServlet2</location> </error-page> |
하지만 이러한 것은 웹 애플리케이션 개발단계에서 설정을 하는 것인데, 이것 말고 서버단계에서 Tomcat 에러 정보 숨기기 를 할 수 있습니다.
Tomcat Server 정보 숨기기
에러가 발생했을때보면 Tomcat 서버의 정보가 함께 표시됩니다. 불필요한 정보 입니다. 이를 숨기거나 다른 것으로 서버단에서 바꿀 수 있습니다. $CATALINA_HOME/lib 디렉토리로 이동하고 다음과 같이 디렉토리를 만들어 줍니다.
1 2 3 |
cd $CATALINA_HOME/lib mkdir -p org/apache/catalina/util cd org/apache/catalina/util |
그리고 다음과 같이 파일을 작성합니다.
1 |
server.info=Linux |
그 다음 Tomcat 을 재시동 시켜 주면 적용이 됩니다.
HTTP Header 에 서버 배너 삭제
잘 모르는 이야기인데, 위에처럼 서버정보를 숨긴다 하더라도 다음과 같이 HTTP Header 에는 배너가 추가됩니다.
Server 에 보면 “Apache-Coyote/1.1″ 가 나옵니다. 이는 다음과 같이 설정함으로써 안나오게 할 수 있습니다.
1 2 3 |
<Connector excecutor="tomcatThreadPool" port="8180" protocol="HTTP/1.1" connectionTimeout="20000" Server=" " redirectPort="81443" URIEncoding="UTF-8" /> |
위에 보는 것처럼 Server=” ” 를 추가해주고 톰캣을 재시작하면 됩니다.
자세한 오류 정보 숨기기
오류가 발생하면 Tomcat 은 아주 자세한 정보를 보여줍니다. 여기에는 파일의 위치, Java 애플리케이션의 Stack trace 까지 다 나옵니다. 이를 막는 방법은 아주 간단합니다.
단, 이 방법은 Tomcat 7.0.55 이상 버전이여야 합니다.
Tomcat 은 여러가지 서버단에서 필터를 넣을 수 있습니다. Tomcat 의 동작에 여러가지 옵션을 넣거나 바꾸거나 하는 겁니다. 이를 필터라고 하지 않고 밸브(Valve)라고 하고 밸브를 통해서 여러가지 설정을 할 수 있는데, 자세한 오류 정보 숨기기도 밸브를 이용해서 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <!-- ErrorReportValve //--> <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" /> </Host> |
위에 보면 Host 설정안에 ErrorReportValve 를 설정하고 있습니다. 이렇게 설정을 한 후에 톰캣을 재시작 시켜주면 적용됩니다.
감사합니다. 광역 오류 숨기기때문에 골치아팠는데 해결 할수 있겠네요.