Engineering/WEB & WAS

[WEB/WAS] Apache↔ Tomcat Mod_Proxy 연동

[앙금빵] 2021. 11. 21.

Prerequisite

  • Apache 설치 (v2.4)
  • Tomcat 설치 (v8.5)

 

Mod_Proxy 연동

  • 별도 모듈 설치가 필요없고 (apache 기본 모듈) 설정이 간편하다.
  • HTTP Reverse Proxy로 동작하며 특정 WAS에 Independent 하다.
  • HTTP를 제공하는 모든 WAS에 적용가능하다.

 

Step 1. 아파치 설정 확인

# 아파치 httpd.conf 설정

vim /usr/local/apache2/conf/httpd.conf

# ServerName 을 검색해서 아래와 같이수정
----
ServerName 127.0.0.1:80

# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other 
# <Directory> blocks below.

<Directory />
    AllowOverride none
#   Require all denied
    Require all granted
</Directory>
----

Proxy 연동시 ServerName & Directory 반드시 설정

  • Require all granted: 무조건 허용
  • Require all denied: 무조건 금지
  • Require ip 10 172.20 192.168.2: 특정 아이피만 접근 허용.
    (여기서는 10, 172.20, 192.168.2로 시작하는 아이피 세 개를 허용한다는 의미)

 

 

Step 2. 가상 호스트 설정하기

가상 호스트 파일 설정 이유
참조: https://checksum.tistory.com/2

  • 웹 개발 서버로 사용할 때 여러 계정이 필요한 경우 발생
  • 스크립트 내부에서 Document Root를 가르키는 환경변수를 사용한다면 문제가 발생한다.
  1. 일반적 계정 추가방식은 http://localhost/~abc 등의 형태
  2. 계정이 몇개가 되던 Document Root는 단 하나를 가르킨다.
  3. 이를 가상 호스트를 사용하여 문제를 해결한다.
# /apache/conf/httpd.conf 파일 열어 아래 모듈 주석을 해제하자.

LoadModule negotiation_module modules/mod_negotiation.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

[root@localhost conf]# pwd
/usr/local/apache2/conf

# VirtualHost 정의 부분에 들어가여 아래와 같은 행을 추가한다.
sudo vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

---

<VirtualHost *:80>

  ServerName localhost

# 포워드 Proxy 경우 On Reverse Proxy Off
ProxyRequests Off

# HTTP 호스트가 받은 HTTP 요청을 Proxy 요청시 사용 Reverse 경우 On으로 해야함
ProxyPreserveHost On

<Proxy *>        
 Order deny,allow
 Allow from all
</Proxy>

# Proxy에 연결할 URL 기술 ServerHost:localhost -> Apache -> ProxyPass URL
ProxyPass / http://<<WAS IP>>:8080/

# <ProxyPassReverse>
# 1 WAS 가 redirect HTTP 응답을 보냈을 경우 Location, Content-Location HTTP 헤더를 수정
# 2 클라이언트에 전달한다. 러비스 프락시가 이 헤더를 수정하지 않으면
# 3 클라이언트는 redirect 시 제대로 연결할 수 없으므로 꼭 설정해야 한다.

ProxyPassReverse / http://<<WAS IP>>:8080/
  <Location />
     Order allow,deny
     Allow from all
  </Location>

</VirtualHost>

---

 

Step 3. 동작 확인

# Static Content Request
[ec2-user@localhost ~]$ curl localhost
<html><body><h1>It works!</h1></body></html>

---

# Dynamic Content Request
[ec2-user@localhost ~]$ curl localhost/index.jsp

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/8.5.69</title>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link href="tomcat.css" rel="stylesheet" type="text/css" />
    </head>

....

참조

(★) Directory
https://mytory.net/archives/3143

(★) 포트번호로 아파치 가상 호스트 설정하기
https://mytory.net/archives/13

Apache Tomcat 간단히 mod_proxy 방식으로 연동
https://swealth.tistory.com/200

댓글