WEB/WAS > Nginx

Nginx 로드밸런싱 (Tomcat2 + Docker)

#port#forwarding#포트#포워딩#ip차단#ip허용

Docker에 Nginx 와 Tomcat 2개를 설치해 로드 밸런싱 테스트

1. Tomcat 설치용 컨테이너 작성 (mytom) 

## 1) 톰캣 컨테이너 작성 (서비스 포트는 8080, 8081로 작성)
docker run -it -d -p 8080:8080 -p 8081:8081 -v /home/docker/logs:/share/logs --name mytom centos

## 2) 톰캣 다운로드
curl -L -O  http://us.mirrors.quenda.co/apache/tomcat/tomcat-9/v9.0.20/bin/apache-tomcat-9.0.20.tar.gz

## 3) 위에서 만든 컨테이너에 파일 복사
docker cp apache-tomcat-9.0.20.tar.gz mytom:/opt/

## 4) 컨테이너에 접속
docker exec -it mytom bash

2.  컨테이너 내 Tomcat 인스톨

## 1) 톰캣 컨테이너에 java 설치
yum -y install java

## 2) 톰캣을 1, 2로 나눠서 설치
cd /opt

tar zxf apache-tomcat-9.0.20.tar.gz

cp -r apache-tomcat-9.0.20 tom1
cp -r apache-tomcat-9.0.20 tom2

## 3) 서비스 포트를 외부공개형으로 변경한다. (2번 톰캣만 8081 로)
        3개정도 8081,  18009,  18...
vi tom2/conf/server.xml

## 4) 각각 톰캣의 접속확인 위해 index.jsp 페이지를 수정한다.
vi /opt/tom1/webapps/ROOT/index.jsp
vi /opt/tom2/webapps/ROOT/index.jsp

## 5) 톰캣을 기동한다.
./tom1/bin/startup.sh
./tom2/bin/startup.sh

 

3. NginX 컨테이너를 만들고 (밸런싱 설정)

## 1) Nginx 컨테이너를 80 포트로 만든 후 접속 (mynginx)
docker run -it -d -p 80:80 --name mynginx centos
docker exec -it mynginx bash

## 2) 컨테이너에 Nginx 설치하기위해 레포 작성
vi /etc/yum.repos.d/nginx.repo
--------------------------------------------------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
--------------------------------------------------------

## 3) Nginx 설치
yum -y install nginx

## 4) Nginx 로드밸런싱 설정

vi /etc/nginx/nginx.conf
-------------------------------------------------------
http {
    upstream muni.com {
        // default Round Robin 방식 (돌아가면서 1,2번에 접속한다.)
        // least_conn;        // Least Connected(젤적은 컨텍션)
        // ip_hash;            // IP해쉬 (동일한 IP를 동일서버로 전달을 보장)

        server 192.168.99.100:8080;
        server 192.168.99.100:8081;
    }

    server {
        listen 80;
        server_name localhost;
        location / {
            proxy_pass http://muni.com;
        }
    }
}
-------------------------------------------------------

## 5) Nginx 기동/정지
/usr/sbin/nginx
/usr/sbin/nginx -s stop

## 6) 톰캣을 돌아가면서 정지/기동하며 확인한다.

./tom1/bin/shutdown.sh
./tom2/bin/shutdown.sh

./tom1/bin/startup.sh
./tom2/bin/startup.sh

WEB서버에서 포트별로 서비스 분배 (포트 포워드)

※ http://{웹서버IP}:80 은 홈페이지,  http://{웹서버IP}:8088 은 관리자용 사이트로 별도 WAS을 관리할 경우 아래와 같이 분기 시킨다.

    upstream tomcat {
        server 100.0.0.10:8088;
    }

    upstream myadmin {
        server 123.1.1.23:8088;
    }


    sendfile        on;
    keepalive_timeout  65;

    server_tokens off;

    server {
        listen       80;
        server_name  localhost;

        location / {
            limit_except GET POST {
               deny all;
            }
            proxy_pass http://tomcat;
        }
        error_page  403 404 405 406 411 497 500 501 502 503 504 505 /error.html;
    }
    server {
        listen       8088;
        server_name  localhost;

   ## 관리자는 특정 IP만 허용하고 나머지는 차단한다.
        allow 1.2.3.4;
        allow 1.10.1.0/24;
        deny all;


        location / {
            limit_except GET POST {
               deny all;
            }
            proxy_pass http://myadmin;
        }
        error_page  403 404 405 406 411 497 500 501 502 503 504 505 /error.html;
    }