[Infra] AWS EC2 + Nginx에 SSL 설정 (https 적용)

Hoon·2023년 9월 19일
1

Infra

목록 보기
8/10
post-thumbnail

이전에 EC2 인스턴스ACM 으로 발급받은 SSL/TLS 을 설정해준적이있었는데, 이번에는 NginxLet's Encrypt 에서 무료로 발급받아 SSL/TLS 인증서 를 설정해보려고한다.

  • Let’s Encrypt 는 Certificate Authority (CA). 즉, 인증기관으로 보다 쉬운 방법과 무료SSL/TLS 인증서를 발급해서 HTTPS 통신을 가능하게 해주는 서비스 기관이다.
  • Let’s Encryptcertbot 이라는 소프트웨어를 통해서 이를 쉽게 자동화하도록 만들어져있다.

인증서 발급

먼저, 아래의 명령어를 통해 cerbot 을 설치해준다.

$ sudo apt update
$ sudo apt install certbot python3-certbot-nginx

이제 아래의 명령어를 통해 SSL/TLS 인증서 를 발급받아준다. 여기서 certonly 옵션은 자동으로 설정을 하지 않고, 인증서 다운만 받겠다는 뜻이다.

sudo certbot certonly --nginx -d hoons.store

이제 /etc/letsencrypt/live/hoon.store 의 경로에 가서 4개의 pem, 1개의 README 가 생성되었는지 확인한다.


Nginx 설정

/etc/nginx/sites-available/ 경로에 conf 파일을 아래와 같이 설정해준다.

# 80 Port로 들어왔을때 https 경로로 리디렉션(301)
server {
  listen 80;
  server_name hoons.store; 
  return 301 https://hoons.store$request_uri;
}

# 443 Port로 들어왔을때 프로젝트가 돌아가는 3000 Port로 forwarding
server {
  listen 443 ssl http2;
  server_name hoons.store;

  # ssl 인증서 적용
  ssl_certificate /etc/letsencrypt/live/hoons.store/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/hoons.store/privkey.pem;
  
  location / { 
    proxy_pass http://127.0.0.1:3000; 
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

설정 후 아래의 명령어로 /etc/nginx/sites-enabled/ 경로에 심볼릭 링크도 설정해준다.

$ sudo ln -s /etc/nginx/sites-available/hoons.conf /etc/nginx/sites-enabled/hoons.conf

이제 해당 도메인으로 접속 시 SSL/TLS 인증서 가 설정되어 https 로 잘 접속되는 것을 확인할 수 있다.

  • http (80 Port) => https (443 Port) redirection
  • https (443 Port) => Next Project (3000 Port) Port Fowarding
    (https, 443 Port 요청에는 SSL/TLS 인증서 적용)

profile
4년차 개발자 Hoon입니다

0개의 댓글