Nginx 소개 및 Docker 배포 장점
Nginx는 가볍고 고성능의 HTTP 서버이자 리버스 프록시 서버로, 현대 웹 서비스의 핵심 구성 요소입니다. 주요 기능은 다음과 같습니다:
- 정적 파일 서비스: HTML, CSS, JavaScript, 이미지 등의 정적 리소스를 효율적으로 제공
- 리버스 프록시: 클라이언트 요청을 백엔드 서버로 전달하며 실제 서버 주소를 숨김
- 로드 밸런싱: 다수의 백엔드 서버에 트래픽을 분산하여 안정성 확보
- SSL 종단: HTTPS 암호화/복호화 처리 및 SSL 인증서 관리
Docker를 사용해 Nginx를 배포하면 환경 불일치, 의존성 충돌, 구성 관리 복잡성 등의 문제를 해결할 수 있습니다. Docker의 주요 이점:
- 개발, 테스트, 프로덕션 환경에서의 일관성 보장
- 가상화 대비 낮은 리소스 사용 및 빠른 시작 시간
- 서비스 간 격리로 안정성 향상
- 빠른 배포 및 롤백 기능
- 명령어 기반의 간편한 운영 관리
사전 준비 작업
Docker가 설치되지 않은 시스템에서는 다음 명령어로 설치할 수 있습니다:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Nginx 이미지 다운로드
Docker Hub에서 공식 Nginx 이미지를 다운로드합니다:
docker pull nginx:latest
이미지 다운로드 확인:
docker images nginx
Nginx 배포 방법
기본 배포 (테스트용)
docker run -d --name nginx-container -p 8080:80 nginx:latest
브라우저에서 http://서버주소:8080 으로 접속하여 Nginx 기본 페이지 확인
볼륨 마운트 방식 (실제 서비스용)
호스트 디렉토리 생성:
mkdir -p /app/nginx/{html,conf,logs}
echo "Nginx Docker 배포 테스트" > /app/nginx/html/index.html
Nginx 컨테이너 실행:
docker run -d --name nginx-service \
-p 80:80 \
-v /app/nginx/html:/usr/share/nginx/html \
-v /app/nginx/conf:/etc/nginx/conf.d \
-v /app/nginx/logs:/var/log/nginx \
nginx:latest
기본 설정 파일 생성 (/app/nginx/conf/default.conf):
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
설정 적용을 위한 컨테이너 재시작:
docker restart nginx-service
Docker Compose를 이용한 배포
docker-compose.yml 파일 생성:
version: '3.8'
services:
webserver:
image: nginx:latest
container_name: nginx-app
ports:
- "80:80"
volumes:
- ./web-content:/usr/share/nginx/html
- ./nginx-config:/etc/nginx/conf.d
- ./nginx-logs:/var/log/nginx
restart: unless-stopped
서비스 실행:
docker-compose up -d
서비스 확인
컨테이너 상태 확인:
docker ps
docker logs nginx-service
자주 발생하는 문제 해결
포트 충돌 문제:
netstat -tuln | grep :80
방화벽 설정:
sudo ufw allow 80/tcp
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload
HTTPS 설정:
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
로그 관리:
docker logs --tail 50 nginx-service