이번 포스팅에서는 Nginx에 SSL을 적용해서 https 통신을 해보려고 한다.
먼저 aws EC2 인스턴스를 public subnet에 생성한다. (아래 링크 참고)
아래 링크에도 나오지만 보안 그룹 인바운드 규칙의 80 포트를 열어줘야 한다.
https://growth-coder.tistory.com/169
Nginx 실행
지금부터는 sudo 권한이 필요하기 때문에 sudo su 명령어를 통해 root 계정을 사용하자. (명령어 앞에 sudo를 붙여도 상관없다.)
sudo su
nginx를 설치한다.
yum install nginx
nginx 설치가 끝났다면 /etc 디렉토리 내부에 /nginx 디렉토리가 존재해야 한다.
이제 nginx를 실행해보자.
systemctl start nginx
실행이 잘 되었는지 확인하기 위해 아래 명령어를 입력한다.
systemctl status nginx
running이 보인다면 잘 실행이 되었다는 뜻이다.
이제 주소창에 http://[ 탄력적 ip 주소 ]를 입력해보자.
아래와 같은 화면이 렌더링 된다면 성공적으로 nginx를 띄운 것이다.
만약 접속이 되지 않는다면 보안 그룹 인바운드 규칙의 80포트가 열려있는지, nginx가 잘 동작 중인지 확인하자.
도메인 연결
SSL 인증서 적용을 위해서는 도메인 이름이 필요하다.
나는 가비아에서 예전에 사용하고 유효기간이 남은 도메인을 사용하려고 한다.
테스트 목적이라면 그냥 가비아에서 할인하고 있는 도메인을 구입하자.
가장 싼 도메인은 1000원 내외로도 살 수 있다.
도메인을 구매했다면 my 가비아 -> 서비스 관리 -> 구입한 도메인 관리에 들어가자.
DNS 정보 -> DNS 관리로 들어간다.
도메인 관리 툴에서 레코드를 추가하고 타입은 A, 호스트는 @, 값/위치는 탄력적 ip 주소를 입력하자.
호스트가 www일 때를 대비해서 해당 레코드도 추가해주었다.
설정이 완료되었다면 구매한 도메인 이름을 검색해보자.
아래처럼 nginx 페이지가 뜬다면 성공적으로 연결을 한 것이다.
하지만 아직 ssl 인증서를 적용하지 않았기 때문에 경고 구문을 확인할 수 있다.
그리고 nginx.conf 파일을 수정해보자.
일반적으로 /etc/nginx 디렉토리 내부에 nginx.conf 파일이 있을 것이다.
vi /etc/nginx/nginx.conf 명령어를 통해 수정해보자.
http 디렉티브 내부의 server 디렉티브 내부에 server_name이라는 디렉티브를 확인할 수 있다.
처음에는 비어있을텐데 여기에 자신의 도메인 이름을 적어주자.
SSL 인증서 적용
이제 SSL 인증서를 적용해보자.
openssl을 사용하여 직접 인증서를 구성할 수도 있지만 인증서 발행처가 CA가 아니라서 브라우저에서 경고창을 띄운다.
그래서 CA인 Let's encrypt를 통해서 인증서를 발급받아 보려고 한다.
Let's encrypt의 장점으로는 SSL/TLS 인증서를 무료로 발급해준다는 것이다.
대신 3개월이라는 유효 기간이 있어서 주기적으로 갱신을 해야 하지만 이 역시도 자동화 할 수 있다.
인증서를 발급받기 위해서 certbot을 설치하자.
아래 링크에 certbot 설치를 하는 방법이 자세하게 나와있다.
https://certbot.eff.org/instructions?ws=nginx&os=pip
한번 그대로 따라해보자.
(그 전에 나는 root 계정으로 전환했기 때문에 sudo를 안 붙여도 되나 공식 문서에는 명령어가 sudo 명령어가 붙어있어서 그냥 sudo를 붙여서 설치했다.)
만약 본인이 Amazon Linux 2023 AMI로 EC2 인스턴스를 생성했다면 apt가 아닌 dnf로 시스템 의존성을 설치하자.
sudo dnf install python3 augeas-libs
만약 이전에 certbot 패키지를 설치한 적이 있다면 삭제를 하라고 안내하고 있다. (설치한 적이 있다면 공식 문서 참고해서 삭제)
이제 파이썬 가상 환경을 세팅하자.
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
이제 certbot을 설치할 수 있다.
sudo /opt/certbot/bin/pip install certbot certbot-nginx
설치가 완료되면 certbot 명령어를 인식할 수 있도록 다음 명령어도 입력하자.
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
이제 certbot을 실행하자.
sudo certbot --nginx
실행을 하고 이메일 주소를 입력하자.
도메인 이름도 등록하자. 나는 [도메인 이름]과 www.[도메인 이름]을 공백으로 구분해서 입력해주었다.
엔터를 누르자.
expand를 하자.
성공 메시지가 뜬다면 https 인증서 연결이 완료되었다는 뜻이다.
이제 주소창에 [도메인 이름] 혹은 www.[도메인 이름]을 입력해보자.
https 적용 전에는 경고 메시지가 떴지만 이제는 뜨지 않는다.
이렇게 nginx에 http 적용을 완료하였다.
댓글