Apache/Tomcat HTTPS 사용 시 톰캣으로 리다이렉트하지 못하는 문제

Apache/Tomcat HTTPS 사용 시 톰캣으로 리다이렉트하지 못하는 문제

기존에 Apache/Tomcat 을 잘 사용하고 있는 기관이었고, 기존 Tomcat 을 무시하고 새로운 Tomcat 을 바라보도록 작업해야 하는 과제였다.

Apache 는 443 포트 사용(즉 https 프로토콜 사용), Tomcat 은 8080 포트 사용, AJP포트는 8009 사용하는 상황이었다.

아파치의 workers.properties 에는 worker.worker1.port=8009 가 잘 적혀있었고, Tomcat의 server.xml 에는 <Connector port=”8009″ URIEncoding=”UTF-8″ protocol=”AJP/1.3″ redirectPort=”18443″ /> 라고 잘 적혀있었다.

아파치 httpd.conf 의 DocumentRoot 값을 새 값으로 잘 바꿔줬고, Directory 태그 값도 새 값으로 잘 바꿔줬다. JkMount 값은 그대로 유지했고, (JkMount /* worker1) 잘못될 이유는 없어보였다.

문제는, 톰캣으로 다이렉트로 접근했을 때는(http ://도메인주소:8080/특정주소 를 입력하면) 페이지가 잘 뜨는데, 아파치를 통해서 접근하면(https ://도메인주소/특정주소 를 입력하면) 페이지가 나오지 않는 문제였다.

이때 Apache 를 443 포트 대신 80 포트를 사용하도록 수정하면, 톰캣으로 다이렉트로 접근했을 때도(http ://도메인주소:8080/특정주소 를 입력해도) 페이지가 잘 뜨고, 아파치를 통해서 접근했을 때도(http ://도메인주소:80/특정주소 를 입력해도) 페이지가 잘 나왔다.

단적으로 443 은 안되는데 80 은 되니까 Apache 에 인증서 문제라고 파악해서 한참을 검색하고 헤맸는데, 사실 인증서는 제대로 씌워진 상태였다.

상급자에게 전화로 도움을 요청한 결과, 로그를 봐야한다는 것을 깨달았다. 용량이 커서 로그를 열 수 없다고만 생각했는데, 기존 로그를 백업해두고 새로 쌓인 로그를 열면 되는 일이었다. 참고로 아파치든 톰캣이든 로그가 쌓여야 하는데 쌓이지 않으면 해당 서비스를 중지하면 된다. 일정분량이 되지 않으면 로그를 쓰지 않는 경우가 있는데, 서비스를 강제로 중지하면 flush가 일어나면서 파일이 써지기 때문이다.

일단 jk_module 을 통해(AJP 포트를 통해) 아파치로 간 요청이 톰캣에 가는지가 중요한 문제였으므로, 톰캣의 엑세스 로그를 봤다(ex : tomcat7\logs\localhost_access_log.2020-11-27.txt). 확인결과 443 을 통해 주소를 요청하면(아파치를 통해서 접근하면) 엑세스 로그가 전혀 써지지 않았다. 결국 아파치 단에서 문제가 생겼다는 뜻이었다.

아파치 톰캣 연동은 jk_module 을 통해(AJP 포트를 통해) 연동하므로, 아파치의 mod_jk.log 를 봤다. (ex : Apache2.2\logs\mod_jk.log) 확인 결과 과거 톰캣의 경로를 찾지 못한다는 에러메시지가 떨어져있었다. 설정파일 어딘가에 과거 톰캣 경로가 남아있다는 뜻이었다.

알고보니 https 프토토콜용(443 포트용) 설정 파일이 따로 있었다. Apache2.2\conf\httpd-ssl.conf 이었고, 해당 설정 파일을 httpd.conf 에서 인크루드하고 있었다. (cf : Include conf/httpd-ssl.conf)

httpd-ssl.conf 파일은 httpd.conf 파일처럼 DocumentRoot 값과 JkMount 값을 다 가지고 있었다. https 일 경우 httpd.conf 의 내용이 아니라 httpd-ssl.conf 파일의 내용을 참조하는 것이었다. DocumentRoot 값과 JkMount 값을 알맞게 고쳐서 해결했다.