APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)
Apache 설정
apache 서버에서 설정해야할 파일은 아래 이미지와 같이 httpd.conf에 작성되어 있는 JkWorkersFile 입니다.
workers.properties 파일에서 저는 아래와 같이 설정 하였습니다.
worker1(192.168.0.10) , worker2(192.168.0.11) 두 서버를 이중화 해두었고, 각각의 worker에 임의의 키를 작성 했습니다.작성한 키는 자신의 마음대로 소문자,대문자,숫자,특수문자를 섞어서 사용해도 되며 worker1과 worker2의 secret key가 달라도 됩니다.
Tomcat 설정
Tomcat 설정은 server.xml 파일에 아래와 같이 사용하시면 됩니다. Tomcat 7.0.100, 8.5.51, 9.0.31 버전의 경우 secretRequired가 기본값으로 되어있으므로 따로 작성 안하셔도 되고, Apache 서버에서 적어뒀던 임의의 Key를 secret 속성에 작성, address는 Tomcat 서버 IP를 작성 해주시면 됩니다.
위에 언급한것보다 낮은 버전의 경우requiredSecret 속성을 사용하셔서 True를 해주신 후 하셔야 할겁니다. (이하 버전의 경우 테스트는 직접 해보지 않았습니다)
아래 코드를 입력하여 Apache 2.4.6 버전과 tomcat-connector를 설치 해줍니다.
yum install httpd httpd-devel gcc gcc-c++
# tomcat-connector 설치
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz
tar zxvf tomcat-connectors-1.2.46-src.tar.gz
cd tomcat-connectors-1.2.46-src/native/
./configure --with-apxs=/bin/apxs
make
make install
## /usr/lib64/httpd/modules/mod_jk.so 파일이 존재하지 않을 경우 아래 내용 실행
cp -p mod_jk.so /usr/lib64/httpd/modules/mod_jk.so
chmod 755 /usr/lib64/httpd/modules/mod_jk.so
아래 코드를 입력하여 jdk와 tomcat 9.0.31 설치 해줍니다.
# JDK 설치
yum -y update
yum install java-1.8.0-openjdk-devel.x86_64
# JDK 환경 변수 설정
vi /etc/profile
# 맨 아래에 내용 작성
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
:wq
# 설정 내용 적용
source /etc/profile
# 1.8.0 으로 재대로 출력 되는지 확인
java -version
# tomcat 9.0.31 설치
wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar zxvf apache-tomcat-9.0.31.tar.gz
mv apache-tomcat-9.0.31 /usr/local/tomcat9
Apache-Tomcat 로드밸런싱 설정
1. Apache 설정
아래 설정은 URL에 .jsp로 끝나는 모든것은 loadbalancer 를 사용하도록 합니다. loadbalancer는 사용자 임의로 정할 수 있습니다. (파일 경로 : /etc/httpd/conf/httpd.conf )
worker.list로 로드밸런싱을 사용할 tomcat을 묶어줍니다. 위의 /*.jsp 뒤에 사용한 이름을 작성해주어야 합니다.
host는 tomcat ip를 적고 port는 ajp를 사용할 포트를 정해 줍니다. 임의로 설정 가능 합니다.
lbfactor는 로드밸런싱을 얼마나 할지를 정하는데, 모두 1로 정하면 라운드로빈(roundrobin) 방식 으로 로드 밸런싱되며 각각의 톰캣별로 로드밸런싱할 비율을 정해줄 수 있습니다. (파일 경로 : /etc/httpd/conf/httpd.confworkers.properties )
이것으로 apache 설정은 모두 종료 되었으니 systemctl restart httpd 입력하여 옵션을 적용 시켜주세요.
2. tomcat 설정
vi /usr/local/tomcat9/conf/server.xml 후 아래와 같이 설정 해줍니다. 저의 경우 apache 에서 설정한대로 192.168.0.10은 8010, 192.168.0.11은 9010 포트를 사용해야하므로 각 서버에 맞게 포트를 할당 합니다.
또한 address="0.0.0.0" 와 SSL설정을 하지 않을것이므로 secretRequired="false" 을 넣었습니다. (tomcat 최신 버전에만 해당 합니다.)
이후 /usr/local/tomcat9/bin/startup.sh을 입력하여 톰캣 실행 후 http://[apache ip]/index.jsp 로 접근하여 로드 밸런싱을 확인 하시면 되고, 저는 apache 설정에서 tomcat 을 모두 lbfactor=1을 주었으므로 라운드로빈 방식으로 동작하게 되어 엔터를 한번 칠때마다 아래 이미지처럼 번갈아가며 출력 됩니다.
로드밸런싱 확인 시 각 서버별로 /usr/local/tomcat9/webapps/ROOT 디렉토리에 jsp 파일을 조금씩 다르게 설정하여 확인하시는게 편합니다.
yum install httpd httpd-devel gcc gcc-c++
# tomcat-connector 설치
wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar zxvf tomcat-connectors-1.2.48-src.tar.gz
cd tomcat-connectors-1.2.48-src/native/
./configure --with-apxs=/bin/apxs
make
make install
## /usr/lib64/httpd/modules/mod_jk.so 파일이 존재하지 않을 경우 아래 내용 실행
cp -p mod_jk.so /usr/lib64/httpd/modules/mod_jk.so
chmod 755 /usr/lib64/httpd/modules/mod_jk.so
httpd.conf 파일 설정 내용
vi /etc/httpd/conf/httpd.conf
# 대충 58번 라인 근처에 아래 내용 작성
LoadModule jk_module /usr/lib64/httpd/modules/mod_jk.so
# jsp 파일에 대해서만 tomcat에 요청하도록 합니다.
# 더 필요한 내용이 있을 경우 문법에 맞춰 작성 해주세요.
<IfModule jk_module>
JkWorkersFile /etc/httpd/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /*.jsp worker1
</IfModule>
workers.properties 설정 내용 (worker1은 위의 IfModule 안에 JkMount 에서 설정한 이름과 같게 설정 해주세요)
vi /etc/httpd/conf/workers.properties
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=[톰캣 서버의 IP]
worker.worker1.port=8009
완료 후 systemctl restart httpd
tomcat 서버 설치 및 설정
JDK 설치 내용
# JDK 설치
yum -y update
yum install java-1.8.0-openjdk-devel.x86_64
# JDK 환경 변수 설정
vi /etc/profile
# 맨 아래에 내용 작성
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
:wq
# 설정 내용 적용
source /etc/profile
# 1.8.0 으로 재대로 출력 되는지 확인
java -version
tomcat 설치 내용
# tomcat 9.0.36 설치
wget http://mirror.navercorp.com/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz
tar zxvf apache-tomcat-9.0.36.tar.gz
mv apache-tomcat-9.0.36 /usr/local/tomcat9
## 8.5.51 버전 설치하실분들은 아래 명령어 입력
wget http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
tar zxvf apache-tomcat-8.5.51.tar.gz
mv apache-tomcat-8.5.51 /usr/local/tomcat8
이후 vi /usr/local/tomcat9/conf/server.xml 들어가서 아래 116~121 라인의 주석을 해제 합니다. (tomcat8 까신분들은 /usr/local/tomcat8/conf/server.xml)
주석을 풀었으면 아래와 같이 설정을 진행 합니다.
address : AJP 커넥터를 이용할 네트워크 IP 대역 허용 (0.0.0.0은 모든 IP 허용)
secretRequired : SSL 설정 안함
완료 후 /usr/local/tomcat9/bin/start.sh 입력하여 톰캣 실행 후 잘 되는지 테스트 합니다. apache 설정할 때 jsp 파일을 tomcat 서버로 지정하였다면 https://[웹서버 IP]/index.jsp 입력 후 톰캣 화면이 뜨면 재대로 연동 된 것입니다.
APP : apache-2.4.6 / tomcat-9.0.31 or 8.5.51 or 7.0.100 / openJDK-1.8.0.242.b08-0.el7_7.x86_64 / mod_jk tomcat-connectors-1.2.46
구성 내용 : apache 서버, tomcat 서버 물리적 분리 후 mod_jk 연동 (SSL 연동 X)
발생 원인
아래에 작성된 내용들은 apache 설정 및 selinux, F/W 등에 문제가 없을 경우에 해당 합니다.
2020년 02월 11일 톰캣에서 8.5.51 버전과 9.0.31 버전을 릴리즈하며 tomcat-apache 연동 설정을 기존대로 구성 시 연동 실패(무한로딩, 403에러 발생)가 발생 하며 AJP 기본값이 루프백 주소를 수신하도록 변경되어 수정해주지 않을 시 503 에러가 발생 합니다.
apache-tomcat 연동 시 변경된 주요 내용은 아래와 같습니다.
AJP Connector 기본 값 비활성화
AJP Connector 속성 address 추가 (기본값:루프백)
AJP Connector 속성 secretRequired 추가 (requiredSecret 에서 변경된걸로 보입니다)
AJP Connector 속성 allowedRequestAttributesPrattern 추가