티스토리 뷰

VPC는 기존 환경에서 계속 사용한다.

프라이빗 서브넷 인스턴스를 접근하기 위해 기존에는 퍼블릭 인스턴스에 접근 후 내부IP를 통해 SSH방식으로 접근했다.

이런 프라이빗 서브넷 인스턴스는 아웃바운드가 없기 때문에 웹에서 패키지를 설치받거나 할 때 문제가 있음.

PRIVATE SUBNET에 존재하는 인스턴스의 패키지 설치를 위해 NAT gateway를 설치

NAT게이트웨이를 위해선 탄력IP(고정) 가 필요

 프라이빗 라우팅 테이블에 만들었던 nat를 연결

프라이빗 서브넷에 있는 서버가 탄력적 IP가 할당된 NAT를 통한다.

NAT를 퍼블릭 서브넷에 생성했기 때문에 NAT를 통하면 외부로 접속이 가능하다.

프라이빗 서브넷의 라우팅 테이블은 VPC내부였기 때문에 탄력적IP를 추가해 주어야지 NAT접근 가능.


3Tier 아키텍쳐를 구성한다.


프라이빗 서브넷에  private 인스턴스 생성한다.

이를 퍼블릿 서브넷 인스턴스 bastion에서 내부 IP로 접속한다

퍼블릭 키를 복사해와서 편집기로 등록하고 ssh -i <퍼블릭키파일> <사용자>@<프라이빗 서브넷 인스턴스 내부IP>

wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90.zip
# 톰캣 설치
apt -y update && apt -y install openjdk-8-jdk
apt -y install unzip
unzip apache-tomcat-8.5.90.zip
rm -rf apache-tomcat-8.5.90.zip
chmod -R 777 tomcat
mv apache-tomcat-8.5.90/ tomcat
./tomcat/bin/startup.sh

private 서브넷에 tomcat을 설치하고 실행시키기가 가능하다.

하지만 외부에서 내부는 접근 불가능(NAT의 원리, 인바운드가 없다.)

cd tomcat/webapps/ROOT
vi test.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
     <head><title>hello world</title></head>
     <body>
     <h2>
             TOMCAT TEST<br><br>
             time : <%= new java.util.Date()%>
             <%@ page import="java.net.InetAddress" %><br>
             <%InetAddress inet= InetAddress.getLocalHost();%>
             WAS ip : <%=inet.getHostAddress()%>
     </h2>
     </body>
</html>

서버의 ip를 보여주는 간단한 jsp 파일, 

curl localhost:8080/test.jsp

톰캣 재시작 후 curl localhost 접속, 톰캣이 잘 동작하는것을 확인가능.

 

※DB는 RDS방식으로 프라이빗 서버에 만들어 놓은 mariaDB를 사용※

이전글에 사용한 DB를 사용할 것이다.

 

DB와 연동을 하기위한 JDBC 라이브러리 다운로드(디렉토리 확인을 위해 이미지로 올림...)

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar

 

다시 /var/www/html에 와서

vi dbtest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<h1>DB</h2>
<%
    	Connection conn=null;
    	try{
            	String Url="jdbc:mysql://<DB주소>/<db>";
            	String Id="<DB유저>";
            	String Pass="<DB암호>";
 
                Class.forName("com.mysql.jdbc.Driver");
                conn=DriverManager.getConnection(Url,Id,Pass);
            	out.println("was-db Connection Success!");
    	}catch(Exception e) {
            	e.printStackTrace();
}
%>

 

<DB주소> = RDS인스턴스 엔드포인트 주소

<db> = DB이름

<DB유저> = 관리자 이름(admin)

<DB암호> = 관리자password

 

curl localhost:8080/dbtest.jsp

톰캣 재시작 후 curl localhost 접속, 톰캣이 rds DB랑 잘 연동되는것을 확인가능.


exit 해서 bastion 퍼블릭 인스턴스로 돌아온다.

 

이제 nginx가 설치된 web서버를 앞단에 붙여보자

bastion 서버를 web서버로 사용하는것임

 

apt -y update
apt -y install nginx
cd /etc/nginx/sites-available/
cp default default.backup
# 만약을 위해 백업

vi default
upstream tomcat {
        ip_hash;
        server <톰캣의주소>:8080;
} 
 
 
server {
        server_name  도메인주소 www.도메인주소;
  
        location / {
            proxy_set_header    Host $http_host;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto $scheme;
            proxy_set_header    X-NginX-Proxy true;
  
            proxy_pass http://tomcat;
            proxy_redirect      off;
            charset utf-8;
         }
 
 
 
}
#톰캣주소만 본인에 맞게 수정해준다

 

# bastion <서버의 퍼블릭 주소>/test.jsp로 접속해본다.



# bastion <서버의 퍼블릭 주소>/dbtest.jsp로 접속해본다.

 



 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함