[Linux] Apache+Tomcat 연동 mod_jk

handa·2022년 11월 21일
0
post-thumbnail

Tomcat은 단독으로 서비스를 할 수 있다.
그러나 Apache와 연동하여 사용하는 경우가 많다.

  • 효율성, 일을 나눠서 할 수 있다. (정적 컨텐츠의 경우 Apache의 서비스 속도가 빠름)
  • Apache 웹 서버의 다양한 모듈 확장
  • 보안 강화

연동할 방법은 3가지 방법이 존재한다.
1. mod_jk
2. mod_proxy
3. mod_prox_ajp
난 가장 많이 사용하는 방법이고 연동하기 쉬운 mod_jk를 설치했다.

1. Apache 설치

[Linux] CentOS7 Apache 설치

2. Tomcat 설치

[Linux] CentOS7 Tomcat 설치

3. mod_jk.so 설치 및 컴파일

mod_jk.so는 AJP(Apache Jserv Protocol) 프로토콜을 이용해서 Apache 와 Tomcat을 연동해주는 모듈이다.
tomcat 기본 port인 8080없이 80번 port로 접속가능해진다.

원하는 경로에다가 mod_jk.so 설치 파일을 다운하면 되는데 보통 경로는 /usr/local 디렉토리에 넣는 것 같다.

cd /usr/local/lib
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

apxs 파일의 위치를 찾아야한다.

find -name apxs
./configur --with-apxs=/usr/bin/apxs
make
make install

configure: error: Invalid location for apxs: 'usr/bin/apxs' 에러가 발생했을 경우 아래와 같이 설정을 변경한다.

vi /usr/bin/apxs

맨위에 #!/replace/with/path/to/perl/interpreter -w 를 #!/usr/bin/perl -w 로 변경한다.

perl이 설치되지 않았다면 패키지를 설치한다.

yum install perl

mod_jk.so 파일이 있는지 확인

cd /etc/httpd/modules
ls

tomcat의 server.xml파일 AJP Connector 설정 변경

vi /tomcat8/conf/server.xml

<Connector port="8009 
		   protocol="AJP/1.3" 
           redirectPort="8443"
           address="127.0.0.1"
           secretRequired="false" />
  • AJP Connector 주석제거
  • address 추가
  • secretRequired 추가

4. Apache + Tomcat 연동 설정

4-1. workers.properties

apache와 연동할 worker(tomcat)들을 설정한다.

vi /etc/httpd/conf/workers.properties

worker.list=tomcat01 // apache와 연동할 tocmat을 입력한다.

worker.tomcat01.port=8009 // AJP 포트
worker.tomcat01.host=127.0.0.1 // tomcat host, AJP Connector 설정의 address와 일치하도록 설정
worker.tomcat01.type=ajp13 // ajp 1.3 사용

4-2. httpd.conf

vi /etc/httpd/conf/httpd.conf

#mod_jk.so 모듈의 위치
LoadMoule jk_module /etc/httpd/modules/mod_jk.so

#workers.properties 설정 파일 위치
JkWorkersFile /etc/httpd/conf/workers.properties

#mod_jk log 위치
JkLogFile /etc/httpd/logs/mod_jk.log

#Load balancing workers will not function properly 오류 대응
JkShmFile /etc/httpd/logs/mod_jk.shm

# /* 요청을 모두 tomcat01으로 넘긴다.
JkMount /* tomcat01

나처럼 모든 요청을 tomcat으로 넘기지 말아라...
css 경로를 apache가 인식 하지못헤 어쩔수 없이...
무조건 경로를 잡아둘거임

JkMount /*.do tomcat01
JkMount /*.jsp tomcat01
JkMount /*.json tomcat01
JkMount /*.xml tomcat01

보통 이렇게 사용한다.

5. 테스트

5-1. Apache 재시작

systemctl restart httpd

5-2. Tomcat 재시작

난 서비스 등록을 해놓았다.
2. Tomcat 설치 링크를 보면댄다.

systemctl restart tomcat

서비스 등록 하지 않았을 시

/tomcat8/bin/startup.sh

5-3. 테스트

8080포트가 아닌 80포트로 접속
브라우저 주소에 http://내 ip 를 입력하면 tomcat 시작페이지가 출력 되면 설정완료

6. SSL 적용

ssl 인증서 받은 사이트에 보면 적용 매뉴얼이 있다. 잘 찾아보시길

6-1. open ssl 설치

yum install openssl

6-2. 가상호스트 설정

vhost.conf 파일을 따로 만들어 설정하였기 때문에 httpd.conf 파일에서 아래의 설정 입력 확인

vi /etc/httpd/conf/httpd.conf

...

IncludeOptional conf.d/*.conf

vhost.conf 설정

vi /etc/httpd/conf.d/vhost.conf

<VirtualHost *:80>
	ServerName localhost.com

    #http(80)으로 접근을해도 https(443)으로 접근 되도록 설정
    RewriteEngine on
    RewriteCond ${HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301, L]
</VirtualHost>

<VirtualHost *:443>
    ServerName localhost.com

    #SSL설정
    #자신이 SSL발급 받은 사이트에 대부분 매뉴얼이 나와있다.
    #SSL파일의 경로 입력
    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/cert/_wilidcard_test.crt
    SSLCertificateKeyFile /etc/httpd/conf/cert/_wildcard_test.key
    SSLCertivicateChainFile /etc/httpd/conf/cert/test.pem
    SSLCACertificateFile /etc/httpd/conf/cert/test.crt
</VirtualHost>

Apache HTTPS/HTTP 리다이렉트(Redirect/Rewrite)하는 방법 참고
RewriteCond %{HTTPS} on/off 설정을 이용하여 프로토콜 별로 처리할 수 있다.
Rewrite를 추가하는 부분에서 SSL 인증서를 사용하고 있다면
[P] 옵션을 사용하기 때문에 (P=Proxy)
SSLProxyEngine On
설정을 추가해줘야 한다.

Proxy를 사용하지 않아도 될 경우에는 [P,R,L] -> [R=301,L] 사용

  • HTTP를 HTTPS로 리다이렉트
   <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
   </IfModule>
  • HTTPS를 HTTP로 리다이렉트
    SSLProxyEngine On => SSL 인증서를 이용하고 있다면 넣어줘야 한다.
      <IfModule mod_rewrite.c>
           RewriteEngine On
           RewriteCond %{HTTPS} on
           RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
      </IfModule>
  • HTTP/HTTPS를 고려하여, 받은 URL 그대로 리다이렉트.
    SSLProxyEngine On => SSL 인증서를 이용하고 있다면 넣어줘야 한다.
<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTPS} on
        RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
        RewriteCond %{HTTPS} off
        RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [P,R,L]
   </IfModule>

6-3. SSL 적용 확인

  • 브라우저 주소에 https:내 ip 로 접속 했을 때 tomcat페이지가 출력되어야 한다.
  • 주소창 왼쪽 끝부분의 자물쇠 모양을 클릭 하였을 때 발급받은 SSL 정보가 맞는지 확인

    SSL 적용 후 https로 접속 시 tomcat페이지가 아닌 apache페이지가 출력 될때가 있다. 이것 때매 시간 많이 썻다...
    openssl 설치를 하면 /etc/httpd/conf.d 디렉토리에 ssl.conf 파일이 생성이 된다.
    ssl.conf 파일안에 VirtualHost가 설정이 되어있을 경우가 있다.
    vhost.conf에 VirtualHost를 설정 해두었지만 ssl.conf 파일을 뒤에 읽어서 브라우저에 화면을 출력하지 못했나 싶다.(내생각)

    <VirtualHost _default_:443>
    ...
    </VirtualHost>

    위에 나와있는 설정을 주석처리하고 다시 접속해 보면 될 것이다.

profile
진짜 해보자

0개의 댓글