개발일기

NginX, Certbot으로 HTTPS 인증하기 본문

배포/aws

NginX, Certbot으로 HTTPS 인증하기

황대성 2025. 4. 23. 00:46

💾 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!가 아닌 내 프로젝트가 나온다.