일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JavaScript
- java8
- 리눅스
- 초기 구축
- jvm
- java9
- docker
- swagger
- MySQL
- ollama langflow
- dto valid
- React
- custom valid
- header setting
- JPA
- NextJS
- jpa entity자동
- Next.js 14
- generate entity
- generate pojos
- 초기 세팅
- 헤더 설정
- 도커
- memcached
- spring
- docker 설치
- spring boot
- CentOS6
- SpringBoot
- Java
- Today
- Total
개발자의 길
springboot - apache - tomcat 연동(springboot 내장톰캣) 본문
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포트가 올라왔는지 확인한다.
'4. JAVA' 카테고리의 다른 글
[java] java9(자바9) 새로운 기능 - 변화와 특징 요약 (1) | 2019.10.17 |
---|---|
JVM의 default heap size 확인(리눅스, 윈도우) (1) | 2019.10.02 |
spring security 파헤치기 (구조, 인증과정, 설정, 핸들러 및 암호화 예제, @Secured, @AuthenticationPrincipal, taglib) (0) | 2019.04.10 |
[javascript/java] spring/jsp-javascript(server/client) websocket 통신 예제 (0) | 2018.01.12 |
[java] 원본 이미지 가지고 썸네일 생성[BufferedImage] (0) | 2017.10.13 |
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.