Linux/CentOS Stream 9

Linux Centos Stream 9 - Apache Tomcat 연동 (mod_jk) - Selinux 문제해결

Ryan's Tech Note 2023. 2. 16. 14:05

https://saju.choeum.com/pos/front/sjuF0101.do?ref=s_BwgZAV1CS2tVJUAFBwEHCjMAAAAAbUJXUg

 

처음 사주 - 인생 7포인트

2026년 성공하는 시기·성향·연애운·금전운·10년 운까지 한눈에

saju.choeum.com

 


 

이 글에서는 Apache (Web Server) - Tomcat (Web Application Server = WAS) 를 연동하는 방법을 알아보겠다. 이 글은 앞의 글의 방법대로 Apache 와 Tomcat 을 설치하고 와야 합니다. 그 연장선 상에 있는 연동 방법입니다.

 

버전 참고 바랍니다.

# httpd -version
Server version: Apache/2.4.53 (CentOS Stream)
Server built:   Jan 30 2023 00:00:00
# ./version.sh
Server version: Apache Tomcat/8.5.85
Server built:   Jan 11 2023 00:09:15 UTC
Server number:  8.5.85.0
JVM Version:    11.0.18-ea+9-LTS
JVM Vendor:     Red Hat, Inc.

 

먼저 mod_jk.so 를 설치한다.

과거에는 다운로드하고 풀고 컴파일하고 복사하고 복잡했는데 지금은 그냥 이 한줄이면 된다.

# dnf -y install mod_jk

[root@voidcom conf.d]# ls -al /etc/httpd/modules/mod_jk.so
-rwxr-xr-x. 1 root root 456672 8월 24 2021 /etc/httpd/modules/mod_jk.so

파일이 잘 생성되었는지 확인해본다.

 

# cd /etc/httpd/conf.d

[root@voidcom conf.d]# ls -al
합계 40
drwxr-xr-x. 2 root root 4096  2월 16 13:40 .
drwxr-xr-x. 5 root root  105  2월 16 13:31 ..
-rw-r--r--. 1 root root  400  2월  1 01:11 README
-rw-r--r--. 1 root root 2916  2월  1 01:10 autoindex.conf
-rw-r--r--. 1 root root  978  8월 24  2021 mod_jk.conf.sample ← 이름 바꿀 파일
-rw-r--r--. 1 root root 1577  1월 19 17:54 php.conf
-rw-r--r--. 1 root root 1485  2월 16 13:40 phpMyAdmin.conf
-rw-r--r--. 1 root root   90  8월 24  2021 uriworkermap.properties.sample ← 사용 안함
-rw-r--r--. 1 root root 1252  2월  1 01:08 userdir.conf ← 도메인 관련 설정
-rw-r--r--. 1 root root  653  2월  1 01:08 welcome.conf
-rw-r--r--. 1 root root  323  8월 24  2021 workers.properties.sample ← 이름 바꿀 파일

연동 관련 파일은 위 4개인데, mod_jk.conf 와 workers.properties 와 userdir.conf 3개만 사용하도록 한다.

(1) mod_jk.conf - mod_jk 라는 물리적인 연동을 해주는 모듈 기본 설정. 처음 한번 설정하면 바꿀일이 없다.

(2) workers.properties - 톰켓과의 단일/이중화 등 연동 방법을 정의해 준다.

(3) userdir.conf - 도메인 별, URI 별 적용할 workers.properties 의 설정을 매핑해준다.

*. uriworkermap.properties 파일은 멀티 도메인을 설정할 수 없고 userdir.conf 에서도 URI 매핑을 다 할 수 있기 때문에 사용하지 않는다.

 

# cp mod_jk.conf.sample mod_jk.conf

# cp workers.properties.sample workers.properties

# vi mod.jk_conf

#JkMountFile conf.d/uriworkermap.properties ← 주석처리한다

# systemctl restart httpd

 

일단 여기까지 해서 오류없이 재시작 되면 apache 쪽 기본 설정은 성공이다.

다음은 톰켓 쪽 설정이다.

 

# vi /usr/local/tomcat/conf/server.xml

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0:0:0:0" secretRequired="false"/>

<!-- --> 주석을 해제하고 위와 같이 수정한다. 최근 버전의 Apache - Tomcat 에서는 보안 이슈 때문에 연동시 secret 이라는 비밀 단어를 주고 받는 것과 secretRequired 값이 true 인 것이 Default 로 설정되었다. 그래서 secret 을 사용안한다는 것을 secretRequired="false" 명시해 줘야 한다. address="0:0:0:0" 모든 IP 주소에서 apache 호출을 받겠다는 것이다. 원한다면 IP 주소를 명시해도 되는데, 어쨌든 위처럼 뭔가 값을 적어줘야 한다.

 

# systemctl restart tomcat

오류 없이 시작되면 tomcat 설정도 성공이다.

 


503 에러가 나는 경우

오늘 날짜 기준으로 지금 까지 어떤 검색을 해도 해결을 못했습니다. 대부분의 블로그에서 해결책으로 제시한 것이 setenforce 0으로 하라고 한 것인데, 이것은 해결책이 아닙니다. setenforce 0 은 selinux를 permissive 설정으로 세팅하는 것으로 disable과 동일한데, 보안이 거부됐을 때 로그만 남겨놓는 것입니다. 즉, 방화벽을 내려놓고 8080 포트 통신 잘되죠? 해결 됐습니다. 이런 소리나 똑같은 것입니다. 정상적인 해결방법은 방화벽을 올려놓은 상태에서 8080 포트만 허용으로 설정해야 하는 것이겠죠. Selinux를 내려놓으면 그 서버는 보안에 취약하게 되어 해커들의 놀이터가 될 것입니다. Selinux지식이 짧아 대략 3일을 삽질해서 해결했는데, 이 글보고 해결하신 분들은 비밀 댓글로 커피 한잔씩 보내주시면 감사히 먹겠습니다. (카카오톡 선물 코드) ^^ 저처럼 며칠씩 삽질하며 고생하지 말라고 방법을 공유해 드립니다.

 

setenforce 1 (enforce) 상태로 운영해야 selinux 가 정상 동작하는 것입니다. (Selinux 방화벽 ON)

# setenforce 1
# getenforce
Enforcing

이 상태에서 apache - mod_jk - tomcat 연동이 되어야 제대로 된 것입니다.

403 또는 503 에러가 날때 setenforce 0 을 하고 제대로 동작하고 setenforce 1을 하고 문제가 난다면 selinux 문제입니다.

이 때는 다음과 같이 조치합니다.

# setsebool -P httpd_can_network_connect 1

브라우저 확인을 합니다. 정상적으로 JSP 화면이 불러와 집니다. 해결 되었습니다.

그럼 systemctl restart httpd 를 실행해서 재기동이 에러없이 되는지까지 확인하고 마무리 합니다.


공감과 댓글 한번씩 부탁드립니다.

 

https://saju.choeum.com/pos/front/sjuF0101.do?ref=s_BwgZAV1CS2tVJUAFBwEHCjMAAAAAbUJXUg

 

처음 사주 - 인생 7포인트

2026년 성공하는 시기·성향·연애운·금전운·10년 운까지 한눈에

saju.choeum.com