KDT/Cloud

240105 Cloud

001cloudid 2024. 1. 5. 12:50
728x90

AWS EC2(nginx)를 활용한 Reverse-Proxy 구현

※프록시

인터넷(클라이언트입장에서) 웹 서버에 접속을 하기 위해 http80포트를 이용 연결하나에 세션이 감당해야함.

그를 방지하기 위해 프록시라고하는 서버를 두어 클라이언트는 프록시와 통신.

프록시와 서버가 통신을 함.

프록시같은경우는 직접 서버에게 응답은 받은 후 클라이언트에게 응답처리함

리버스 프록시의 경우 클라이언트가 서버에게 직접 응답을 받음

즉, 프록시는 대리인이라고 할 수 있다.

※순서를 따라서 실습

 

구성요소(3개의 인스턴스 생성)

  • nginx Reverse-Proxy(nginx) : 3.35.21.27 port80
  • web1(apache) : 54.180.105.44 port80
  • web2(tomcat) : 13.209.50.246 port 8080

    ※IP는 변동됨
    클라이언트로부터 웹 접속을 받으면 nginx가 이를 먼저 받아서 PHP처리는 web1에게 JSP처리는 web2에게 전달하여 처리

Nginx

  1. nginx EC2에 nginx설치
    sudo yum date -y(인스턴스 업데이트 )
    sudo vi /etc/yum.repos.d/nginx.repo nginx(nginx저장소 등록)
    ====================================================
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    ====================================================
    esc :wq

    sudo yum install nginx -y(nginx설치)
    sudo systemctl start nginx(nginx시작)
    sudo systemctl enable nginx(인스턴스 재시작시 자동으로 nginx 동작 설정)

    가상호스트사용
    sites-available 디렉토리 생성 및 virtual.conf 파일 생성
    cd /etc/nginx
    sudo mkdir sites-available
    sudo vi sites-available/virtual.conf
    ====================================================
    server {
            listen 80;
            server_name localhost;
            access_log /var/log/nginx/virtual/access_log;
            error_log /var/log/nginx/virtual/error_log;

            location / {
                    root /var/www/virtual/;
                    index index.php index.html;
            }
    }
    ====================================================
    esc :wq
  2. 로그 파일이 위치할 디렉터리 생성
    sudo mkdir /var/log/nginx/virtual/
  3. HTML 파일이 위치할 디렉터리 생성(DocumentRoot)
    sudo mkdir -p /var/www/virtual


    sudo mkdir /var/www
    sudo mkdir /var/www/virtual/을 해주어야하는데
    -p 를 사용함으로써 sudo mkdir -p /var/www/virtual

  4. nginx.conf 편집
    sudo vi /etc/nginx/nginx.conf
    ====================================================
    32번 라인주석처리 #include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-available/*.conf;
    ====================================================
    esc :wq

    sudo nginx -t(설정 파일이 올바른지 확인)
    sudo systemctl restart nginx(nginx 재시작)

    php설치
    sudo amazon-linux-extras enable php8.1(php 8.1 활성화)
    sudo yum -y install php php-fpm php-cli php-common php-devel php-pear php-mbstring php-mysqlnd php-pdo php-gd (php 설치)

    ls /etc/nginx/conf.d/ 위치해있음 이를 etc/nginx/sites-available/ 위치로 이동해줘야함
    sudo cp /etc/nginx/conf.d/php-fpm.conf /etc/nginx/sites-available/(php.fpm.conf을 복사)

    sudo systemctl start php-fpm(php-fpm 시작)
    sudo systemctl enable php-fpm(php-fpm 자동 실행)

web1

  1. sudo yum update -y
  2. sudo yum install httpd -y(아파치 설치)
  3. sudo amazon-linux-extras install php7.4 -y (※버젼이 달라도 가능함)
  4. sudo systemctl start httpd(아파치 시작)
  5. sudo systemctl enable httpd(아파치 자동시작)
  6. sudo vi /var/www/html/index.html
    ====================================================
    web1 test page
    ====================================================
    esc :wq

    sudo vi /var/www/html/phpinfo.php
    ====================================================
    <?php
            phpinfo();
    ?>
    ====================================================
    esc :wq

nginx

web1에 대한 리버스 프록시 가 동작하도록 nginx설정

sudo cp /etc/nginx/sites-available/virtual.conf /etc/nginx/site-available/virtual.conf_bk

기존에 존재하던 virual.conf 파일 백업

 

sudo vi /etc/nginx/sites-available/virtual.conf (virtual.conf 파일 수정)

====================================================

server {
        listen 80;
        server_name localhost;
        access_log /var/log/nginx/virtual/access_log;
        error_log /var/log/nginx/virtual/error_log;


        location / {
               index index.php index.html;
               proxy_pass http://54.180.105.44:80;
               proxy_set_header Accept-Encoding         "";
               proxy_set_header Host $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_connect_timeout 90;
               proxy_send_timeout 90;
               proxy_read_timeout 90;
               proxy_redirect off;

        }
}

====================================================

클라이언트 nginx server

실제 클라이언트 ip로 보내기 위해서 설정함

그렇게 해야 목적지 까지 보내줄 수 있다.

 

sudo systemctl restart nginx(nginx 재시작)

 

윈도우 웹 브라우저에서 nginx IP주소를 입력하면 web1의 index.html이 보임(그림 1)

그림 1.

IP주소/phpinfo.php도 호출(그림 2)

그림 2

클라이언트 -> nginx -> server

클라이언트가 nginx에게 :80 요청(web1) :8080요청(web2)

80이냐 8080이냐 nginx가 분류해서 80이면 web1에게, 8080 web2에게 각각 전달

단순히 nginx는 전달역할만한다. 이것이 리버스 프록시이다.

 

web2

JSP 처리를 위해 web2에 tomcat 설치

apache-tomcat가 html,php, jsp 처리 혼자서 해결하기에 부하가 많이 걸린다.

이를 리버스프록시로 부하를 분산함.

sudo yum update -y

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz(링크를 를 통해 tomcat 다운로드)

tar xvfz apache-tomcat-9.0.84(압축해제)

sudo mv apache-tomcat-9.0.84 /usr/local/tomcat(디렉터리 이름을 tomcat으로 변경하면서 /usr/local로 이동)

sudo amazon-linux-extras install java-openjdk11 -y(jdk 설치)

sudo yum install java-11-openjdk-devel -y (jdk 설치)

cd /usr/local/tomcat/bin

sh startup.sh(시작, ※종료 sh shutdown.sh)

 

nginx

nginx 서버에 jdk 설치

sudo amazon-linux-extras install java-openjdk11 -y(jdk 설치)

sudo yum install java-11-openjdk-devel -y (jdk 설치)

nginx의 sites-available/ 아래의 tomcat_proxy.conf파일 생성 및 수정

sudo vi /etc/nginx/sites-available/tomcat_proxy.conf

====================================================

server {
        listen 80;
        server_name localhost;
        access_log /var/log/nginx/virtual/access_log;
        error_log /var/log/nginx/virtual/error_log;


        location / {
               index index.php index.html;
               proxy_pass http://13.209.50.246:8080;
               proxy_set_header Accept-Encoding         "";
               proxy_set_header Host $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_connect_timeout 90;
               proxy_send_timeout 90;
               proxy_read_timeout 90;
               proxy_redirect off;

        }
}

====================================================

esc :wq

 

sudo systemctl restart nginx

 

윈도우\에서 주소창에 nginx EC2 IP 주소 입력하면 web1의 index.html(그림1),

nginx EC2 IP 주소/phpinfo.php를 입력하면 web1 phpinfo(그림2),

nginx EC2 IP 주소/index.jsp를 입력하면 그림3과 같이 나와야하는데.

 

 

그림 3.

설정이 잘못되어있어 오류페이지로 나온다. 다음시간에..

728x90

'KDT > Cloud' 카테고리의 다른 글

240119 Cloud  (0) 2024.01.19
240112 Cloud  (0) 2024.01.12
231229 Cloud  (0) 2023.12.29
231222 Cloud  (0) 2023.12.22
231215 Cloud  (0) 2023.12.15