개발자의 길

springboot - apache - tomcat 연동(springboot 내장톰캣) 본문

4. JAVA

springboot - apache - tomcat 연동(springboot 내장톰캣)

자르르 2019. 4. 30. 11:40


Apache - SpringBoot(내장톰캣) 연동

개요

사내정보 시스템 SSO연동을 위해 Apache사용이 불가피함

Part1. mod_jk를 이용한 tomcat 연동(Apache설정)

사내에서 발급받은 서버에는 기본적으로 Apahce2.2가 설치되어 있어 Apahce설치과정은 생략한다.

mod_jk를 설치과정 및 Apache설정은 다음과 같다.


1) tomcat-connectors설치

cd /usr/local/src wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.44-src.tar.gz tar -xzf tomcat-connectors-1.2.44-src.tar.gz

 

2) native 디렉토리로 이동

cd tomcat-connectors-1.2.44-src/native

 

3) 컴파일

./configure --with-apxs=/usr/sbin/apxs make make install

apxs path를 입력해줘야하는데, defulat는 /usr/sbin/apxs이다. 만약 이 경로에 없다면 찾아서 알맞게 입력하자.

만약 없는 경우

sudo yum install httpd-devel

 

4) httpd.conf수정

cd /etc/httpd/conf sudo vi httpd.conf

(httpd.conf) 맨아래추가

LoadModule jk_module modules/mod_jk.so include conf/mod_jk.conf include conf/http_vhost.conf

 

5) mod_jk.conf 추가

vi mod_jk.conf

(mod_jk.conf)

<IfModule mod_jk.c>

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel info

</IfModule>

 

6) workers.properties 추가

vi worker.properties

 

(workers.properties)

worker.list=worker1,worker2

 

worker.worker1.port=18009

worker.worker1.host=127.0.0.1

worker.worker1.type=ajp13

worker.worker1.lbfactor=1

 

worker.worker2.port=28009

worker.worker2.host=127.0.0.1

worker.worker2.type=ajp13 worker.worker2.lbfactor=1

 

work가 여러개이면 woker.list에 콤마(,)구분자로 추가

 

7) http_vhost.conf 추가

vi http_vhost.conf

 

(http_vhost.conf)

 

<VirtualHost *:80>

ServerName customtargeting.nhnent.com

JkMount /* worker1

</VirtualHost>

 

<VirtualHost *:80>

ServerName addinfra-site.nhnent.com

JkMount /* worker2

</VirtualHost>

 

서비스를 추가할려면 workers.properties와 http_vhost.conf에 값을 추가하고 apache를 재시작해주면 된다.

Part2. mod_jk를 이용한 tomcat 연동(Spring-Boot설정)

SpringBoot 1.x와 SpringBoot 2.x의 AJP포트 설정 법에 차이가 있다. 그 이유는 SpringBoot1.x에서는 내장톰캣을 기본으로 사용하고 있었지만 SpringBoot2.x에서는 내장톰캣대신에 netty를 사용하기 때문이다.

1) application.properties 값추가

tomcat.ajp.protocol=AJP/1.3

tomcat.ajp.port=18009

tomcat.ajp.enabled=true

 

2-1) SpringBoot1.x ContainerConfig 클래스 추가

import org.apache.catalina.connector.Connector;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;

import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

@Configuration

public class ContainerConfig {

   @Value("${tomcat.ajp.protocol}")

   String ajpProtocol;

 

   @Value("${tomcat.ajp.port}")

   int ajpPort;

 

   @Value("${tomcat.ajp.enabled}")

   boolean tomcatAjpEnabled;

 

   @Bean

   public EmbeddedServletContainerCustomizer containerCustomizer() {

             return container -> {

                       TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;

                       if (tomcatAjpEnabled) {

                              Connector ajpConnector = new Connector(ajpProtocol);

                              ajpConnector.setPort(ajpPort); ajpConnector.setSecure(false);

                              ajpConnector.setAllowTrace(false); 

                              ajpConnector.setScheme("http");

                              tomcat.addAdditionalTomcatConnectors(true);

                        }

              };

   }

}

 

2-2) SpringBoot2.x ContainerConfig 클래스 추가

import org.apache.catalina.connector.Connector;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;

import org.springframework.boot.web.servlet.server.ServletWebServerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

@Configuration

public class ContainerConfig {

   @Value("${tomcat.ajp.protocol}")

   String ajpProtocol;

   @Value("${tomcat.ajp.port}")

   int ajpPort;

   @Bean

   public ServletWebServerFactory servletContainer() {

      TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();

      tomcat.addAdditionalTomcatConnectors(createAjpConnector());

      return tomcat;

   }

 

   private Connector createAjpConnector() {

      Connector ajpConnector = new Connector(ajpProtocol);

      ajpConnector.setPort(ajpPort);

      ajpConnector.setSecure(false); ajpConnector.setAllowTrace(false);

      ajpConnector.setScheme("http");

      return ajpConnector;

   }

}

 

3) 부팅 로그 확인

10:50:32.520 [main] [INFO ] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] 10:50:32.538 [main] [INFO ] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] 10:50:32.544 [main] [INFO ] o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read 10:50:32.560 [main] [INFO ] o.apache.coyote.ajp.AjpNioProtocol - Initializing ProtocolHandler ["ajp-nio-18009"] 10:50:32.563 [main] [INFO ] o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read 10:50:32.563 [main] [INFO ] o.apache.coyote.ajp.AjpNioProtocol - Starting ProtocolHandler ["ajp-nio-18009"] 10:50:32.576 [main] [INFO ] o.s.b.c.e.t.TomcatEmbeddedServletContainer - Tomcat started on port(s): 8080 (http) 18009 (http)

ajp포트가 올라왔는지 확인한다.

 

 



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments