You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# 내부 HTTPS 테스트
curl -k https://localhost
# ✅ 정상 응답# 외부 접속 테스트
curl -k https://your-domain.com
# ❌ 타임아웃# 포트 바인딩 확인
sudo ss -tlnp | grep :443
# ✅ Nginx가 443 포트 바인딩 중
원인 분석: AWS 보안 그룹에서 443포트(HTTPS)가 열려있지 않음 해결 방법: AWS EC2 콘솔 -> 보안 그룹 -> 인바운드 규칙 편집
유형: HTTPS
프로토콜: TCP
포트 범위: 443
소스: 0.0.0.0/0 (Anywhere-IPv4)
🎉 결과
인프라
인터넷 사용자
↓
https://your-domain.com (도메인)
↓
AWS Route 53 / GoDaddy DNS
↓
AWS EC2 (YOUR_EC2_IP)
↓
Nginx (80/443 포트)
↓
Docker Container (8080 포트)
↓
Next.js 14 Standalone App
보안 그룹 최종 설정
포트 22 (SSH) TCP 0.0.0.0/0
포트 80 (HTTP) TCP 0.0.0.0/0
포트 443 (HTTPS) TCP 0.0.0.0/0
# 인증서 상태 확인
sudo certbot certificates
# 수동 갱신 (자동으로 되지만 필요시)
sudo certbot renew
# 갱신 테스트
sudo certbot renew --dry-run
Nginx 관리
# 설정 문법 확인
sudo nginx -t
# 서비스 재시작
sudo systemctl restart nginx
# 로그 확인
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Docekr 관리
# 컨테이너 상태 확인
docker ps
# 로그 확인
docker logs coplan-app
# 재시작cd /home/ubuntu/coplan
docker compose restart
🧠 느낀점 또는 생각 메모
처음에는 단순히 도메인만 연결하면 될 줄 알았는데, 실제로는 DNS, 웹서버, SSL, 방화벽까지 모든 레이어가 유기적으로 연결되어야 한다는 것을 깨달았습니다.
진행하면서 우선 중요하게 생각하게 된 점들: 1. AWS 보안 그룹의 중요성:
SSL 인증서까지 설정했는데도 443 포트를 빼먹어서 한참 헤맸습니다. 인프라를 하면 할 수록 세심한 부분까지 신경써야 한다는 것을 느꼈습니다. 2. 레이버별 디버깅의 중요성:
curl -k https://localhost (내부 성공)
curl -k https://your-domain.com (외부 실패)
이런식으로 단계별로 확인해야하는 습관을 가져야 한다는 중요성 또한 느꼈습니다.
3. t2.micro에서의 메모리 관리:
이 부분에서 가장 애먹었던거 같습니다. 아무래도 micro에서는 메모리가 부족하다보니 툭하면 뻑나는경우가 다반사였네요. 이번에 포트 변경을 통해 Docker와 Nginx를 분리하는 설계 또한 중요하다는 것을 느끼게 되는 계기가 되었습니다. 그리고 무엇보다 돈을 쓰면 시간 절약을 할 수 있다는 것까지... 그냥 돈써서 메모리 늘리세요!
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
📌 배운 내용
GoDaddy에서 구매한 Coplan.work 도메인을 AWS EC2에 연결하고 HTTPS를 적용하는 전체 과정을 학습
🔍 배경 / 문제 상황
기존에는 http://YOUR_EC2_IP로만 접속 가능한 상태였는데, 다음과 같은 필요성이 있었습니다:
문제점:
목표:
✅ 핵심 정리 / 해결 방법
기존 http://YOUR_EC2_IP IP 접속에서 https://coplan.work 도메인 접속을 할 수 있도록 작업을 수행했습니다.
🎯 작업 전후 비교
Before (작업 전)
❌ http://YOUR_EC2_IP (복잡한 IP 주소)
❌ HTTP (보안 없음)
❌ Docker 80포트 직접 노출
After (작업 후)
✅ https://coplan.work
✅ HTTPS (SSL 보안 연결)
✅ Nginx 리버스 프록시 + Docker 내부 포트
🛠 사전 준비사항
도메인 및 DNS 설정
도메인: coplan.work (GoDaddy 구매)
DNS 레코드 설정:
A @ YOUR_EC2_IP TTL 600초
A dev YOUR_EC2_IP TTL 600초
기존 인프라 상태
EC2: t2.micro (Ubuntu 22.04)
탄력적 IP: YOUR_EC2_IP
Docker: coplan-app 컨테이너가 80포트에서 실행 중
Next.js: 14 Standalone 방식으로 배포
🔍 1단계: DNS 전파 확인
작업 내용: DNS가 정상적으로 전파되었는지 확인
실행 명령어
결과
✅ 모든 DNS 서버에서 정상 해상도 확인
⚙️ 2단계: Docker 포트 변경
문제점: Nginx가 80/443 포트를 사용해야 하는데, Docker가 80포트를 점유 중
해결 방법: Docker 컨테이너 포트를 80 → 8080으로 변경
docker-compose.yml 수정
실행 명령어
검증
curl http://localhost:8080 # ✅ "랜딩페이지" 정상 응답 확인🌐 3단계: Nginx 설치 및 리버스 프록시 설정
Nginx 설치
방화벽 설정
도메인별 서버 블록 설정
설정 활성화
검증
curl http://your-domain.com # ✅ 도메인으로 접속 성공!🔐 4단계: SSL 인증서 설정 (Let's Encrypt)
Certbot 설치
sudo snap install core && sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbotSSL 인증서 발급
입력 정보:
자동 갱신 설정 확인
🚨 5단계: 문제 해결 - 연결 타임아웃
문제 발생: 브라우저에서 "ERR_CONNECTION_TIMED_OUT" 오류
진단 과정
원인 분석: AWS 보안 그룹에서 443포트(HTTPS)가 열려있지 않음
해결 방법: AWS EC2 콘솔 -> 보안 그룹 -> 인바운드 규칙 편집
🎉 결과
인프라
인터넷 사용자 ↓ https://your-domain.com (도메인) ↓ AWS Route 53 / GoDaddy DNS ↓ AWS EC2 (YOUR_EC2_IP) ↓ Nginx (80/443 포트) ↓ Docker Container (8080 포트) ↓ Next.js 14 Standalone App보안 그룹 최종 설정
Nginx 최종 설정
🔧 유지보수 명령어
SSL 인증서 관리
Nginx 관리
Docekr 관리
🧠 느낀점 또는 생각 메모
처음에는 단순히 도메인만 연결하면 될 줄 알았는데, 실제로는 DNS, 웹서버, SSL, 방화벽까지 모든 레이어가 유기적으로 연결되어야 한다는 것을 깨달았습니다.
진행하면서 우선 중요하게 생각하게 된 점들:
1. AWS 보안 그룹의 중요성:
SSL 인증서까지 설정했는데도 443 포트를 빼먹어서 한참 헤맸습니다. 인프라를 하면 할 수록 세심한 부분까지 신경써야 한다는 것을 느꼈습니다.
2. 레이버별 디버깅의 중요성:
curl -k https://localhost(내부 성공)curl -k https://your-domain.com(외부 실패)3. t2.micro에서의 메모리 관리:
이 부분에서 가장 애먹었던거 같습니다. 아무래도 micro에서는 메모리가 부족하다보니 툭하면 뻑나는경우가 다반사였네요. 이번에 포트 변경을 통해 Docker와 Nginx를 분리하는 설계 또한 중요하다는 것을 느끼게 되는 계기가 되었습니다. 그리고 무엇보다 돈을 쓰면 시간 절약을 할 수 있다는 것까지... 그냥 돈써서 메모리 늘리세요!
📚 래퍼런스
Nginx 공식 문서
Let's Encrypt 시작 가이드
AWS EC2 보안 그룹 관리
Next.js Standalone 배포
Nginx 리버스 프록시 설정 가이드
그 외 다양한 블로그 글
Beta Was this translation helpful? Give feedback.
All reactions