EC2에 Docker를 이용한 Nginx 컨테이너 구축하기
이것저것 패키지를 설치하여 EC2를 더럽히고 싶지 않았기에 Docker를 통한 Nginx 컨테이너를 구축하고 설정을 해보려고 한다. 일단 Nginx에 대해 알아보자!
전에 한번 Nginx와 로드밸런싱에 대해 블로그 포스트를 한적이 있다. 정리한 글은 아래 링크를 한번 보시오!
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
'DevOps' 카테고리의 다른 글
Jenkins VS GitHub Actions과 그 특징 (0) | 2023.08.16 |
---|---|
Redis Sentinel을 이용한 고가용성 +EC2에 Docker-Compose를 이용한 실습 (3) | 2023.03.22 |
Redis Replication 구축 (3) | 2023.03.02 |