환경 : react
, express
, aws EC2 ubuntu20
본 포스팅은 AWS EC2 환경에서 적용할 수 있는 방법을 설명한다.
SSH를 사용하여 EC2 인스턴스에 접속한 ubuntu CLI환경에서 사용할 수 있는 튜토리얼이다.
하단의 참고한 영상에서 certbot-auto
를 소개해주어서 시도했으나 서트봇 오토
는 이상 지원되지 않는다. 알아보니 그냥 certbot을 사용해서 할 수 있다고 한다.
서트봇
은 여기 에서 운영체제를 선택한 후 다운 받을 수 있다. 운영체제에 따라 안내가 되어있다. 우분투의 경우 아래와 같은 화면나온다.
서트봇을 다운받으려면 스냅샷을 먼저 설치하도록 안내가 되어있다.
SSH환경에서 다운을 받은 후 서트봇
을 루트 권한으로 실행시킨다.
3개월 후 SSL인증서가 만료될 때 이메일을 받을 수 있는 이메일을 적어주고, 몇가지 동의를 한 후 인증서를 부여받을 도메인 이름을 입력한다.
하지만 위와 같이 도메인을 입력하는 과정에서 오류가 발생했다.
두 가지 문제가 있었다.
1. NginX가 켜져있지 않은 것
2. 80번 포트를 다른 곳에서 사용중인 것
80번 포트를 누가 사용하는지 확인해보았다.
노드가 80번 포트에서 실행되고 있음을 볼 수 있었다.
PID(프로세스 아이디)를 kill 해주었으나 여전히 종료되지 않았다.
node는 현재 pm2로 실행되어 있으므로, sudo pm2 kill
명령어로 종료해주었다.
이후 다시 sudo lsof -i tcp:80
명령어를 사용해보니 아무것도 나오지 않은 것을 보아 확실히 종료되었음을 알 수 있었다.
NginX를 실행시켜 주었다. 다시 sudo lsof -i tcp:80
명령어를 통해 NginX가 잘 실행된 것을 볼 수 있다.
다시 sudo cerbot을 실행해서 도메인을 입력한다.
이제 오류없이 성공메시지가 뜨는 것을 볼 수 있다.
여기에서 키가 저장되어있는 위치를 확인할 수 있고, 만료일자와 갱신에 관한 안내가 나와있다.
과거에는 certbot-auto를 이용해서 갱신시켜줘야했는데, 이제는 자동갱신으로 바뀌었나보다.
이 인증서는 2023-09-12에 만료됩니다. 이러한 파일은 인증서가 갱신될 때 업데이트됩니다. Certbot은 백그라운드에서 이 인증서를 자동으로 갱신하도록 예약된 작업을 설정했습니다.
SSL인증서으로 https를 프로토콜을 사용할 것이기 때문 관련된 포트도 열어 주어야한다. AWS EC2 콘솔로 돌아와 인스턴스
> 보안
> 보안그룹
> 인바운드 규칙 편집
에서 다음과 같이 HTTPS 유형을 추가해준다. 포트는 443이며 자동적으로 설정된다.
다음과 같이 설정한다. 각각의 의미는 주석과 같다.
server {
listen 443 ssl; // 443 포트에서 SSL/TLS 암호화로 듣고 있음
server_name reloading.co.kr; // 서버의 이름 또는 도메인 이름
ssl_certificate /etc/letsencrypt/live/reloading.co.kr/fullchain.pem; // SSL 인증서 파일 경로
ssl_certificate_key /etc/letsencrypt/live/reloading.co.kr/privkey.pem; // SSL 인증서 개인 키 파일 경로
include /etc/letsencrypt/options-ssl-nginx.conf; // SSL 구성 옵션을 포함
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; // SSL을 위한 디피-헬만(Diffie-Hellman) 매개 변수 파일
location /api {
proxy_pass http://127.0.0.1:3060; // 요청을 지정된 백엔드 서버(Node.js API)로 프록시
proxy_http_version 1.1;// 프록시 서버와의 통신에 HTTP 버전 1.1을 사용
proxy_set_header Upgrade $http_upgrade; // 클라이언트 요청 헤더의 'Upgrade' 값을 프록시 요청 헤더에 설정
proxy_set_header Connection 'upgrade'; // 클라이언트 요청 헤더의 'Connection' 값을 'upgrade'로 설정하여 커넥션을 업그레이드
proxy_set_header Host $host; // 프록시 요청 헤더에 호스트 헤더를 설정
proxy_cache_bypass $http_upgrade; // 캐시 우회를 위해 'Upgrade' 요청에 대해서는 캐시를 사용하지 않도록 설정
}
root /var/www/reloading-build;
try_files $uri $uri/ /index.html;
}