Docker를 이용한 Nginx 설치 및 config 수정

EC2에 Docker를 이용한 Nginx 컨테이너 구축하기

이것저것 패키지를 설치하여 EC2를 더럽히고 싶지 않았기에 Docker를 통한 Nginx 컨테이너를 구축하고 설정을 해보려고 한다. 일단 Nginx에 대해 알아보자!

 

전에 한번 Nginx와 로드밸런싱에 대해 블로그 포스트를 한적이 있다. 정리한 글은 아래 링크를 한번 보시오!

 

https://doreree.tistory.com/9

 

로드밸런싱 (Road Balancing)

먼저 로드밸런싱이란?? 서버가 처리해야 할 업무 또는 요청(Load)을 여러 대의 서버로 나누어(Balancing) 처리 많은 트래픽을 대처하는 방법 Scale Up : 기존 서버의 성능을 높인다. (비용이 증가) Scale Ou

doreree.tistory.com

 

 

Nginx

  • 오픈소스 웹서버 소프트웨어
  • Reverse Proxy Server로 활용된다. 80 PORT로 들어오는 내용을 3000, 9000~ 등의 포트로 분산 시켜준다.
  • 비동기 이벤트 구조를 기반으로 동작한다. (Event-Driven)

 

EC2 내 컨테이너 구조

ubuntu@ip-172-26-12-167:~$ docker ps -a

PORTS                                       NAMES
0.0.0.0:9002->9002/tcp, :::9002->9002/tcp   pjt2-container
0.0.0.0:9001->9001/tcp, :::9001->9001/tcp   pjt1-container
0.0.0.0:9003->9003/tcp, :::9003->9003/tcp   pjt3-container
0.0.0.0:80->80/tcp, :::80->80/tcp           nginx-container
0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql-container
0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis-container
0.0.0.0:8888->8080/tcp, :::8888->8080/tcp   jenkins-container

 

API 요청 분기를 위한 conf 파일 작성

1. EC2 내의 home 디렉토리 밑에 nginx 디렉토리 생성 후 아래에 default.conf 파일을 작성한다.

  • /home/ubuntu/ngnix/default.conf
upstream BackEnd {
        server pjt1-container:9001;
}
upstream Auth {
        server pjt2-container:9002;
}
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
       root   /usr/share/nginx/html/build;
       index  index.html index.htm;
    }
    location /api {
        proxy_pass http://BackEnd;
    }
    location /auth {
        proxy_pass http://Auth;
    }
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

ㅅ    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
"./nginx/default.conf" 51L, 1257C

 

upstream

Server 설정에서 Nginx가 받아들인 요청을 어떤 서버로 흘려보내 줄 것인지 결정할 때 사용한다.

upstream BackEnd {
        server pjt1-container:9001;
}
upstream Auth {
        server pjt2-container:9002;
}

 

location

URL뒤에 붙는 API의 요청을 분기한다.

location / {
 	# Jenkins 빌드 실행 시 React 프로젝트 build 파일 경로
   	root   /usr/share/nginx/html/build;
   	index  index.html index.htm;
}
location /api {
    proxy_pass http://BackEnd;
}
location /auth {
        proxy_pass http://Auth;
}

 

2. Docker image pull 및 컨테이너 실행 명령어

  • 미리 생성해 둔 default.conf 파일을 컨테이너 내의 default.conf 위치에 위치시킨다.
docker run 
	--name nginx-container 
    --network test-network
    -d -p 80:80 
    -v ~/nginx/default.conf:/etc/nginx/conf.d/default.conf
     nginx:latest