내장 톰캣을 사용해서 동작하는 스프링부트 기반 웹어플리케이션을 AJP 프로토콜을 이용해서 아파치 HTTPD 웹 서버와 연동할 일이 생겼다. 연동을 위해 할 내용은 생각보다 간단했다. 다음의 두 가지만 해 주면 된다.

  1. 스프링부트 어플리케이션: 내장 톰캣을 위한 AJP 커넥터 설정
  2. 아파치 웹 서버 : ProxyPass로 ajp 연동 설정

스프링부트 내장 톰캣 설정


내장 톰캣 설정에 AJP 커넥터를 추가한다.


@Configuration

public class ContainerConfig {

    @Bean

    public EmbeddedServletContainerCustomizer containerCustomizer() {

        return container -> {

            TomcatEmbeddedServletContainerFactory tomcat

                    (TomcatEmbeddedServletContainerFactory) container;


            Connector ajpConnector = new Connector("AJP/1.3");

            ajpConnector.setProtocol("AJP/1.3");

            ajpConnector.setPort(9090);

            ajpConnector.setSecure(false);

            ajpConnector.setAllowTrace(false);

            ajpConnector.setScheme("http");

            tomcat.addAdditionalTomcatConnectors(ajpConnector);

        };

    }

}


아파치 설정


아파치에 톰캣 관련 설정을 추가한다.


ProxyPass "/contextPath" "ajp://localhost:9090/contextPath"


그리고 아파치 서버를 재시작하면 끝이다.

  1. 임예준 2016.06.14 10:29

    이걸 몰라서 boot 내장 톰캣을 못쓰고,
    static 과 java 리소스를 httpd 와 외부 톰캣에 각각 배포 해야 되나 싶었는데 말입니다.
    ProxyPass를 사용하면 JK를 안써도 되는거죠?

    • 최범균 madvirus 2016.06.14 11:42 신고

      준! 아파치 httpd 2.1부터 가능하고
      https://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.html 문서를 보면 도움이 될 듯.

  2. 김린 2018.12.12 15:18

    현재 스프링부트 2.0.3 버전으로 개발 중입니다.
    내장 톰캣과 아파치 연동 하려는데,
    소스 추가시 EmbeddedServletContainerFactory 가 없습니다.
    버전 업에 따른 업데이트된 다른 방법이 있는지요?

    • 최범균 madvirus 2018.12.20 09:21 신고

      직접 해 본 건 아닌데요,
      https://docs.spring.io/spring-boot/docs/2.0.7.RELEASE/reference/htmlsingle/#boot-features-customizing-embedded-containers 문서를 보면 TomcatServletWebServerFactory 클래스를 사용하면 될 것 같습니다.

+ Recent posts