백앤드/CI|CD

[CI/CD] SSL 인증서 발급 및 Nginx HTTPS 설정

영최 2024. 3. 8. 17:01
728x90

1️⃣ 도메인 발급 및  AWS Route53 DNS 설정

SSL 인증서를 발급받으려면 도메인 주소가 있어야함

Route53는 설정한 도메인으로 라우팅하여 접속할 수 있게하는 AWS 서비스 이다.

참고 사이트: https://jindevelopetravel0919.tistory.com/189 

 

[AWS] 가비아 도메인 설정 및 EC2 에 해당 도메인 적용

EC2 서버를 배포하면 기본적으로 ip주소로 입력하여 요청하거나 호출해야 합니다. 하지만 보통 일반적인 사이트들을 보면 ip주소로 접근하지 않고 도메인을 입력하여 접속합니다. 따라서 도메인

jindevelopetravel0919.tistory.com

 

2️⃣ Nginx 설치

Nginx 설치

sudo apt update 
sudo apt install nginx

 

방화벽 설정

sudo ufw app list

#출력
#Available applications:
#  Nginx Full
#  Nginx HTTP
#  Nginx HTTPS
#  OpenSSH

각 설정이 의미하는 바는 다음과 같습니다:

  • Nginx HTTP: 포트 80번만 허용
  • Nginx HTTPS: 포트 443번만 허용
  • Nginx Full: 포트 80, 443번 허용

방화벽 설정 적용

sudo ufw allow 'Nginx HTTP'

 

상태 체크

sudo ufw status

#출력
#Status: active
#
#To                         Action      From
#--                         ------      ----
#Nginx HTTP                 ALLOW       Anywhere
#Nginx HTTP (v6)            ALLOW       Anywhere (v6)

 

만약 방화벽이 inactive 상태라면 아래 명령어를 입력하여 활성화

sudo ufw enable

 

 

3️⃣ Nginx 상태 체크

systemctl status nginx


#출력(정상이면)
# nginx.service - A high performance web server and a reverse proxy server
#     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
#     Active: active (running) since Wed 2022-04-20 09:03:47 UTC; 24h ago
#       Docs: man:nginx(8)
#   Main PID: 20596 (nginx)
#      Tasks: 2 (limit: 1147)
#     Memory: 5.4M
#     CGroup: /system.slice/nginx.service
#             ├─20596 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
#             └─20597 nginx: worker process

 

주소창에 도메인 이름이나 ip 입력해서 기본 Nginx 랜딩 페이지가 표시되는지 확인

기본 Nginx 랜딩 페이지

Nginx 관리 명령어

# 시작
sudo systemctl start nginx

# 종료
sudo systemctl stop nginx

# 재시작
sudo systemctl restart nginx

# 리로드 (변경된 설정을 적용하는 경우 사용. 기존 연결을 끊지 않음.)
sudo systemctl reload nginx

# 기본적으로 서버 시작 시 nginx가 자동으로 실행되는데, 이를 막고 싶은 경우
sudo systemctl disable nginx

# 서버 시작 시 자동으로 nginx를 실행하고 싶은 경우
sudo systemctl enable nginx

 

4️⃣ Nginx 도메인 설정 

 

도메인 주소만 입력해주면 됨

cd etc/nginx/sites-enabled
sudo vi default

# 아래 내용 입력
server {
  listen 80; # 80포트로 받을 때
  listen [::]:80;
  server_name 도메인주소; 
}

 

5️⃣ SSL 인증서 발급

Cerbot 설치

sudo apt install certbot python3-certbot-nginx

 

방화벽에서 HTTPS 허용

sudo ufw allow 'Nginx Full' # HTTP와 HTTPS 모두 허용
sudo ufw delete allow 'Nginx HTTP' # 기존의 HTTP 허용 설정 제거

 

 

certbot 을 이용한 인증서 발급 방법은 아래와 같이 크게 4가지 방법이 존재하는데

(1) webroot, (2) webserver, (3) standalone, (4) dns 를 이용한 인증서 발급이 있다.

 

여기서 적용할건 (2) webserver 으로 Nginx 웹서버 옵션을 이용하여 발급 받는다.

웹서버를 사용하면  (3) standalone 와 달리 발급받을때 서비스를 중단 안해도 된다. 

 

인증서 발급 

sudo certbot --nginx certonly -d [도메인]

 

이후에 이메일을 입력하라고 하면 이메일 주소를 입력한다.

축하한다고 뜨면 발급 성공이다.

6️⃣ Nginx Https 설정

 

cd etc/nginx/sites-enabled
sudo vi default

# 아래 내용 입력

server {
  listen 80; # 80포트로 받을 때
  listen [::]:80;
  server_name zayoung21.store; # 도메인주소
  return 301 https://$server_name$request_uri;
}


server {
  listen 443 ssl;
  server_name zayoung21.store;

  # ssl 인증서 적용하기
  ssl_certificate /etc/letsencrypt/live/zayoung21.store/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/zayoung21.store/privkey.pem;

}

 

이후 개발하면 프론트엔드, 백엔드 포트를 넣어주어야한다.

아래 처럼

 

 

다음 https://[도메인] 으로 접속해보자

성공하면 아래 페이지가 보인다.

기본 Nginx 랜딩 페이지

 

접속에 실패한다면 아래를 확인해보자

1) EC2 인바운드 규칙 포트로 443이 열려있어야한다.

2) listen 443 ssl -> ssl 이 설정 파일에 있는지 확인해보자 

3) 방화벽에 해당 포트들이 허용되어 있는지 확인해보자 

 

728x90