✅ Nginx의 역할
✅ SSL을 적용하는 이유
✅ Docker를 활용하는 이유
nginx.conf)# user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
error_log /var/log/nginx/error.log warn;
sendfile on;
keepalive_timeout 65;
upstream front_proxy {
# 도커에 실행되는 서버 IP
server 172.18.0.3:8080;
}
# HTTP -> HTTPS 리디렉션
server {
listen 80;
server_name tamalog.site www.tamalog.site;
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 설정
server {
listen 443 ssl;
server_name tamalog.site www.tamalog.site;
# SSL 인증서 설정 (Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/tamalog.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tamalog.site/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# SSL 세션 설정
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# 리버스 프록시 설정 (백엔드로 요청 전달)
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_pass http://front_proxy/;
}
# 에러 페이지 설정
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
upstream front_proxy: 백엔드 서버(프론트엔드 포함)로 요청을 프록시 server 80: HTTP 요청을 HTTPS로 자동 리디렉션 server 443: HTTPS 서버 설정 ssl_certificate, ssl_certificate_key: Let's Encrypt 인증서 적용 proxy_pass http://front_proxy/: 서버(React/Vue 또는 API)로 요청 전달 위의 Nginx 설정을 적용한 후, Docker를 활용하여 컨테이너를 실행할 수 있습니다.
docker run -d --name nginx-container \
--network myblog-network \
-p 80:80 -p 443:443 \
-v /etc/letsencrypt:/etc/letsencrypt:ro \
-v ~/config/nginx.conf:/etc/nginx/nginx.conf \
nginx
-d → 백그라운드 실행 --name nginx-container → 컨테이너 이름 설정 --network myblog-network → 블로그 관련 서비스와 같은 네트워크 사용 -p 80:80 -p 443:443 → 호스트의 80, 443 포트를 컨테이너의 80, 443 포트와 연결 -v /etc/letsencrypt:/etc/letsencrypt:ro → Let's Encrypt SSL 인증서 마운트 -v ~/config/nginx.conf:/etc/nginx/nginx.conf → Nginx 설정 파일을 컨테이너에 적용 Nginx 설정을 변경한 후, 변경된 설정을 반영하려면 컨테이너 내부의 설정 파일을 업데이트하고 Nginx를 재시작해야 합니다.
docker cp config/nginx.conf nginx-container:/etc/nginx/nginx.conf
위 명령어를 실행하면 로컬의 config/nginx.conf 파일을 컨테이너 내부의 /etc/nginx/nginx.conf 경로로 복사합니다.
docker restart nginx-container
이제 변경된 설정이 적용된 상태로 Nginx가 다시 실행됩니다.
SSL 인증서를 발급받으려면 Certbot을 사용하여 Let's Encrypt에서 인증을 받아야 합니다.
Nginx가 이미 실행 중이라면 아래 명령어를 실행하세요.
sudo certbot certonly --webroot -w /var/www/html -d tamalog.site -d www.tamalog.site
certonly → 인증서만 발급 (Nginx 설정 유지) -w /var/www/html → 웹서버 루트 디렉토리 (인증 파일 저장) -d tamalog.site -d www.tamalog.site → 인증서를 적용할 도메인 인증이 완료되면 /etc/letsencrypt/live/tamalog.site/ 경로에 SSL 인증서가 생성됩니다.
자동 갱신 설정 (크론탭 활용)
echo "0 3 * * * certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null
이렇게 하면 매일 새벽 3시에 SSL 인증서를 자동 갱신합니다.
1️⃣ Nginx 컨테이너 실행
docker restart nginx-container
2️⃣ 도메인에서 HTTPS 접속 테스트
브라우저에서 https://tamalog.site에 접속하여 SSL 적용 여부 확인
3️⃣ SSL 인증서 정상 적용 확인
openssl s_client -connect tamalog.site:443 -servername tamalog.site