Nginx + Let's Encrypt로 HTTPS 사용하기 (Amazon Linux 2023)

Kim yohan·2024년 3월 26일
0

TIL

목록 보기
16/16

토이 프로젝트로 분실물 서비스를 개발했고, 도메인을 구매하고 연결한 상태인데, HTTPS를 사용하기 위해 Let's Encrypt를 사용하기로 했다.
Let's Encrypt를 사용하면 무료로 HTTPS를 사용할 수 있다.
Nginx는 주소 뒤의 :8080을 제거하기 위해, 포트포워딩 용도로만 사용 중이다.

스프링부트로 웹 서비스 출시하기 - 9. 도메인구매, HTTPS 연결, 타임존 수정
해당 글을 따라서 진행 중이었으나, EC2의 Amazon Linux 버전이 달라 문제가 발생하였고, 겪은 시행착오를 공유하고자 한다.


문제

Amazon Linux 2023부터는 EPEL을 지원하지 않는다! 따라서, EPEL 패키지를 통해 Certbot 설치를 할 수 없다. Certbot은 Let's Encrypt 설치 및 업데이트를 쉽게 해주는 툴이다.
https://repost.aws/ko/knowledge-center/ec2-enable-epel


해결

Certbot을 EPEL을 통해 설치하는 대신, Python 가상환경에서 pip로 설치한다!

Certbot 설치

[Nginx] aws EC2에서 Nginx에 https 적용 (Amazon Linux 2023)
AWS EC2 certbot ssl 인증

# python 가상환경 설정
sudo dnf install -y python3 augeas-libs pip
sudo python3 -m venv /opt/certbot/

# certbot 설치
sudo /opt/certbot/bin/pip install --upgrade pip
sudo /opt/certbot/bin/pip install certbot certbot-nginx

# certbot 실행
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
sudo certbot --nginx

certbot을 nginx 옵션으로 돌려야 하기 때문에 certbot-nginx를 꼭 설치해주어야 한다.

Nginx 설정

sudo vi /etc/nginx/nginx.conf

Nginx 설정은 향로님이 정리해준 그대로 작성하였다.
스프링부트로 웹 서비스 출시하기 - 7. Nginx를 활용한 무중단 배포 구축하기

수정 후 :wq로 저장하고, Nginx 재시작하기

sudo service nginx restart

향로님 글에서는 무중단 배포 구축을 위해 더 많은 과정을 거치지만,
나는 포트포워딩을 위해서만 Nginx를 사용하고 있어서, 여기까지만 해주면 된다.



📌 에러 및 해결법

1. Could not automatically find a matching server block for 도메인명. Set the `server_name` directive to use the Nginx installer. 에러
Nginx 설정에서 `listen`에 "default_server"와 `server_name`을 "localhost"로 설정하니 해결되었다. 아마, `server_name`만 제대로 설정해도 해결되었을 것이다.

참고
[nginx/Let's Encrypt] 도메인 연동부터 SSL 적용까지
NGINX + Let's encrypt: Could not automatically find a matching server block


2. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) 에러
80번 포트가 이미 사용 중이라 발생하는 에러라고 한다.

검색했을 때, 보통의 해결법은

fuser -k 80/tcp

위 명령어를 통해 프로세스를 kill하고 다시 하면 된다고 하였지만, 나는 안되었다.

나의 경우,

sudo pkill -f nginx & wait $!

위 명령어로 하니 해결되었다.

참고
nginx - nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)



결과

이제 경고 메세지가 뜨지 않고, HTTPS를 사용할 수 있다!

profile
꾸준히 성실하게

0개의 댓글