개발일기
NginX, Certbot으로 HTTPS 인증하기 본문
💾 NginX 설치
NginX 설치 공식 홈페이지는 여기를 눌러주세요.
sudo apt update
sudo apt install nginx
❓ NginX는 왜 사용하는 걸까
1. Reverse Proxy (리버스 프록시)
- 클라이언트 → Nginx → 실제 앱 서버
- 서버 IP대신 프록시IP가 사용되기 때문에 클라이언트는 서버의 IP를 알수가 없음(🔒보안에 유리)
2. HTTP → HTTPS 리다이렉트
- http://example.com → 자동으로 https://example.com 으로 보내준다
3. SSL 인증서 연결 (Let's Encrypt 등)
- 🔒보안 접속을 위해 필수 요소이다
4. 정적 파일 서버
- HTML, 이미지, CSS 같은 파일을 직접 서비스할 수 있다(빠르게 콘텐츠 제공 가능)
5. 로드 밸런싱 (여러 서버 분산 처리)
- 요청을 여러 백엔드 서버에 분산할 수 있다(트래픽 많을 때 성능 향상에 좋음)
🤖 Certbot 설치
Certbot 설치 공식 홈페이지는 여기를 눌러주세요.
Certbot에서는 snap으로 설치하는 방식을 권장 한다.
snap 방식을 사용하려면 snap을 먼저 설치해야 한다.
1️⃣ snap 설치
sudo apt install snapd
2️⃣ Certbot 설치
sudo snap install --classic certbot
3️⃣ HTTPS 인증서 발급 받기
sudo certbot --nginx -d example.com -d www.example.com
- 본인 이메일 입력
- ACME 서버에 등록할 것인가? → Y
ACME를 확인하려면 여기를 눌러주세요.
- EFF 소식을 이메일로 받을 것인가? → 선택
- 인증서 발급 완료
🌐 발급 완료 후 사이트에 들어가 보면?
🔍 왜 "Welcome to nginx!"가 뜰까?
certbot --nginx 명령어는 SSL 인증서만 자동으로 설정해 준다.
Nginx 설정 파일에서 **어떤 서버(App)**로 요청을 넘겨줘야 하는지까지는 설정해주지 않는다.
그래서 우리가 직접 Nginx 설정 파일에서 우리 앱과 연결해 주어야 한다.
🔗 Nginx와 프로젝트 연결하기
1️⃣ Nginx 설정파일 열기
sudo nano /etc/nginx/sites-available/default
2️⃣ Nginx 설정파일 수정하기
Nginx 설정파일에 들어가면 아래처럼 구성되어 있다.(아닐수도 있음)
1개는 HTTP용 (80포트), 1개는 HTTPS용(443포트), 1개는 HTTP 요청 처리용(80포트로 접속시 443포트로 리다이렉트) 이다.
server{
location / {}
}
server{
location / {}
}
server{
}
최종 설정을 하면 아래와 같다.
아마 certbot이 자동으로 생성해주기 때문에 크게 건드릴 것 없이 추가해 주면 된다.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name example.com www.example.com;
return 404; # managed by Certbot
}
3️⃣ 설정이 완료 되었는지 확인하기
sudo nginx -t
4️⃣ Nginx 재시작 하기
sudo systemctl restart nginx
다 완료되었다면 이제 welecome Nginx!가 아닌 내 프로젝트가 나온다.
'배포 > aws' 카테고리의 다른 글
가비아 도메인과 EC2 연결하기 (Route53 사용 안함) (0) | 2025.04.22 |
---|---|
AWS EC2 배포 환경 만들기 (준비하기) (0) | 2025.04.19 |
EC2에 내 프로젝트 클론하기, 리눅스 명령어 파악하기, env파일 생성하기 (0) | 2025.04.18 |
AWS EC2 인바운드 규칙, 포트 설정 하기 (0) | 2025.04.18 |
EC2 생성하기 및 탄력적 IP 연결하기, 인스턴스 연결하기 (0) | 2025.04.16 |