Reverse Proxy

다수의 서버를 대리하는 웹서버

서버가 클라이언트에게 요청에 대한 응답하는게 아니라 reverse proxy 서버가 대신 수행함

WEB 구축

VM이름: web, cent7, 2core 2GB 20GB, IP: 211.183.3.80 /24

  • tomcat 서버에서 db가 잘 연동되는지 확인

  • apache 설치
[root@web ~]# yum install -y httpd
  • 인덱스 파일 생성
[root@web ~]# echo 'static file' > /var/www/html/index.html

  • 리버스 프록시 설정을 위해 httpd.conf 파일을 수정
[root@web ~]# vi /etc/httpd/conf/httpd.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80> # 80번 포트로 들어오는 모든 ip에 대한 설정
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *> 
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass /jsp http://211.183.3.88:8080/
    ProxyPassReverse /jsp http://211.183.3.88:8080/
</VirtualHost>

# ProxyRequest Off로 프록시와 무관, 리버스 프록시와 무관

  • 기능에 변경사항이 생겼기 때문에 재시작
[root@web ~]# systemctl restart httpd
[root@web ~]# curl localhost:80/
static file

[root@web ~]# curl localhost:80/jsp/dbtest.jsp
<h1>DB</h2>
was-db Connection Success!

ProxyPassReverse

응답하는 주체를 tomcat에서 web서버로 변경 (클라이언트가 헷갈리지 않게 하기 위해서)

  • 만약 웹서버에 접속이 안된다면 tomcat 서버는 되는지 확인
  • tomcat 서버가 된다면 방화벽 등 초기세팅이 잘못되지 않았는지 확인
[root@web ~]# curl 211.183.3.88:8080/dbtest.jsp
<h1>DB</h2>
was-db Connection Success!

실습)

10.10.3.80/tomcat/dbtest.jsp를 쳤을때 was-db connection success가 뜨도록 한번 구성해보세요. 서버는 3대를 다 새로 만드세요.

1. VMnet1: 10.10.3.0 대역, GNS3 설정

2. 라우터 설정

conf t
int f0/0
ip add 211.183.3.2 255.255.255.0
int f0/1
ip add 211.183.3.50 255.255.255.0
ip route 0.0.0.0 0.0.0.0 211.183.3.2

3-1. tomcat

# openjdk11과 wget, unzip을 설치
[root@tomcat ~]# yum install -y java-11-openjdk wget unzip

# 설치 파일 가져와서 압축해제
[root@tomcat ~]# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.34/bin/apache-tomcat-10.1.34.zip
[root@tomcat ~]# unzip apache-tomcat-10.1.34.zip > /dev/null

# 이름 변경
[root@tomcat ~]# mv apache-tomcat-10.1.34/ tomcat

# tomcat 동작파일을 실행하기 위해 모든 권한 부여
[root@tomcat tomcat]# chmod 777 -R /root/tomcat

# 실행
[root@tomcat tomcat]# sh ./bin/startup.sh

3-2. db

[root@dbdb ~]# yum install -y mariadb-server
[root@dbdb ~]# systemctl restart mariadb
[root@dbdb ~]# systemctl enable mariadb
[root@dbdb ~]# mysql_secure_installation
[root@dbdb ~]# mysql -u root -p1234
MariaDB [(none)]> create database tomcatdb;
MariaDB [(none)]> grant all privileges on tomcatdb.* to tomcatuser@'%' identified by '1234';
  • DB이름 : tomcatdb
  • DB사용자 : tomcatuser
  • DB암호 : 1234
  • DB주소 : 10.10.3.6

톰캣서버로 돌아가서 mysql 명령어 설치 후 db접속이 되는지 확인

  •  mysql 명령어 설치
[root@tomcat tomcat]# yum install -y mysql
  • db 접속 확인
[root@tomcat ~]# mysql -u tomcatuser -p1234 -h 10.10.3.6

  • 아래 내용을 수정하여 dbtest.jsp 파일 생성
[root@tomcat ~]# vi dbtest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%
        Connection conn=null;
        try{
                String Url="jdbc:mysql://10.10.3.6/tomcatdb";
                String Id="tomcatuser";
                String Pass="1234";

                Class.forName("com.mysql.jdbc.Driver");
                conn=DriverManager.getConnection(Url,Id,Pass);
                out.println("was-db Connection Success!");
        }catch(Exception e) {
                e.printStackTrace();
}
%>
  • 수정을 잘 했다면 /root/tomcat/webapps/ROOT 경로로 파일 이동
[root@tomcat ~]# mv dbtest.jsp /root/tomcat/webapps/ROOT/dbtest.jsp

3-3. reverse proxy

  • 리버스 프록시 설정을 위해 httpd.conf 파일을 수정
[root@web ~]# vi /etc/httpd/conf/httpd.conf
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80> # 80번 포트로 들어오는 모든 ip에 대한 설정
    ProxyRequests Off
    ProxyPreserveHost On
    <Proxy *> 
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass /tomcat http://10.10.3.88:8080/
    ProxyPassReverse /tomcat http://10.10.3.88:8080/
</VirtualHost>


실습)

'외부'대역(211.183.3.0/24)에는 211.183.3.100의 주소를 갖는 mint 클라이언트가 존재하며 '내부'에는 아래와 같이 서로 다른대역에 서버들이 존재한다.

mint는 웹서버의 <주소>/tem에 접속시 간단한 무료템플릿을 볼 수 있고,
<주소>/wp 에 접속시 워드프레스 블로그,
<주소>/tom에 접근했을때는 tomcat 서버로 리버스프록시 되어 db와 잘 연동됐는지를 확인하는 페이지에 접속되길 바란다. 또한 이 페이지는 tomcat 서버에서 접속했을때는 localhost:8080/was 로 접속이 됐었다.

# 실습2) 결과