반응형
Apache와 Springboot 연동(mod_jk)
Web Server로써 Apache를 Springboot의 내장 Tomcat과 연동하는 작업을 앞서 정리한 글의 mod_jk 방식을 사용하여 다음과 같은 과정을 거쳐 진행해 보았다.
일단 Springboot에서 다음과 같은 설정 파일들을 작성해주었다.
application.properties 값 설정
1
2
3
|
tomcat.ajp.protocol=AJP/1.3
tomcat.ajp.port=8001
tomcat.ajp.enabled=true
|
ContainerConfig class 생성
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
|
@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");
((AbstractAjpProtocol<?>)ajpConnector.getProtocolHandler()).setSecretRequired(false);
return ajpConnector;
}
}
|
그 후 서버쪽으로 Springboot를 build 및 배포를 해주었고, Server에서 아래와 같은 설정을 해주었다. (Apache와 mod_jk의 설치과정은 생략)
httpd.conf 수정
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
|
vi apache/conf/httpd.conf
# mod_js.so 위치
LoadModule jk_module modules/mod_jk.so
# mod_jk.c 설정
<IfModule mod_jk.c>
# 다음과 같은 경로는 tomcat으로 연결
JKMount /* tomcat
JKMount /*.jsp tomcat
JkMount /jkmanager/* jkstatus
JkMountCopy All
<Location /jkmanager/>
JkMount jkstatus
Require ip 127.0.0.1
</Location>
# workers.properties 위치
JkWorkersFile "apache/conf/workers.properties"
# 로스 위치
JkLogFile "| apache/bin/rotatelogs -l apache/mod_jk.log.%y%m%d 86400 "
# 로그 레벨
JkLogLevel error
# 로그 포멧
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkShmFile "apache/mod_jk.shm"
#JkRequestLogFormat "%w %V %T"
</IfModule>
|
workers.properties 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vi apache/conf/workers.properties
worker.list=tomcat
worker.tomcat.type=ajp13
worker.tomcat.host=127.0.0.1
worker.tomcat.port=8001
worker.tomcat.retries=1
worker.tomcat.socket_timeout=10
worker.tomcat.connection_pool_timeout=10
worker.list=jkstatus
worker.jkstatus.type=status
|
이러한 설정을 해준 후 Apache를 실행시킨 후 Server를 실행시킨다면 다음과 같은 연동원리로 작동하게 된다.
- 클라이언트는 Apache에 접속(80포트)
- 만일 클라이언트의 요청이 Tomcat에서 처리하도록 지정된 요청이라면 Apache는 Tomcat의 AJP포트(8001포트)에 접속하여 요청을 전달
- Tomcat은 Apache로 부터 받은 요청을 처리하고 Apache에게 응답
- Apache는 Tomcat에게 받은 응답을 클라이언트에 전달
결론적으로 Apache는 80번 포트를 사용하고, Springboot는 8080번(기본값) 포트를 사용한다. 그리고 이 둘은 mod_jk 설정에서 지정해놓은 AJP 8001번 포트를 이용하여 서로 통신을 하는 방식이다.
출처
joswlv.github.io/2019/01/03/Apache_SpringBoot/
careydevelopment.us/2017/06/19/run-spring-boot-apache-web-server-front-end/
반응형
'Java&Web' 카테고리의 다른 글
[Logging] Springboot에 Log4j2 설정하기 (0) | 2020.12.29 |
---|---|
[Logging] slf4j, log4j, logback, log4j2 (0) | 2020.12.29 |
[JUnit] JUnit이란 (0) | 2020.12.18 |
[Apache] Apache와 Tomcat 연동하기 (0) | 2020.12.17 |
[WEB] Web Server와 WAS (0) | 2020.12.17 |