letsencrypt 인증서 발급
EC2 리눅스 Cli 환경에서 커맨드로 발급 진행
코드에디터에서 나오는 <도메인>에서 꺽쇠는 빼셔야 합니다.
- letsencrypt 설치
sudo apt-get install letsencrypt
- 현재 웹서버에 SSL 인증서 자동 설치
sudo letsencrypt certonly --standalone -d <도메인>
EX) sudo letsencrypt certonly --standalone -d naver.com
아래는 위 명령어의 동작과정을 나타냄.
- Let's Encrypt 서버에 연결하여 도메인 소유 확인을 요청합니다.
- 도메인 소유 확인을 위해 웹 서버 루트 디렉토리에 임시 파일을 생성합니다.
- 웹 서버를 다시 시작하여 임시 파일을 제공합니다.
- Let's Encrypt 서버는 임시 파일에 접근하여 도메인 소유 확인을 수행합니다.
- 도메인 소유 확인이 성공하면 인증서가 발급됩니다.
- 발급된 인증서는 /etc/letsencrypt/live/<도메인> 디렉토리에 저장됩니다.
EC2 Nginx 설치
Nginx 설치 이전에 Nginx가 기본적으로 점유하는 80, 443 포트에 대해 방화벽을 열어줍니다.
sudo ufw allow 80 //TCP,UDP 허용
sudo ufw allow 443 //TCP,UDP 허용
sudo ufw status //방화벽 listen 확인
방화벽 확인 이후 apt-get을 통해 nginx를 설치해줍니다.
sudo apt-get install nginx //설치
sudo nginx -v //설치 확인
sudo systemctl stop nginx //실행 중지
Nginx Config 추가
Nginx의 Config는 /etc/nginx/nginx.conf 파일이 최상단 root config 파일입니다.
또한 추가로 default.conf 파일도 자동 생성이 되는데 경로는 아래와 같습니다.
/etc/nginx/conf.d/default.conf
default.conf 파일은 root config 파일인 nginx.conf에 include된 설정파일로써 두 개의 파일에 같은 내용이 작성되있다면 nginx.conf 파일이 더 높은 우선순위를 가지고 적용됩니다.
또한 /etc/nginx/sites-available 및 /etc/nginx/sites-enabled/ 두 개의 디렉토리도 알아야합니다.
sites-available 디렉토리는 설정을 저장하는 곳이지만 실제로 nginx에 반영되지는 않습니다.
한마디로 설명하면 conf 설정 파일들의 대기열 같은 곳입니다.
sites-enabled 디렉토리는 설정이 실제로 적용되는 공간.
보통 개발을 진행할 때 sites-available에 모든 설정파일들을 작성해놓고, 실제 설정이 변경될 때 마다 하드링크 혹은 심볼릭 링크로 sites-enabled 폴더로 옮깁니다.
즉 config를 적용시키는 방법으로는 다양하게 있는데 마지막에 설명한 available and enabled 방식을 사용할 것을 권장합니다.
Config 내용
- vim 명령을 사용하여 config 파일을 작성하면 됩니다.
- 설정 내용으로는 SSL 리버스 프록시 관련 내용만 있습니다.
server {
location / {
proxy_pass <http://localhost:3000>;
}
location /api {
proxy_pass <http://localhost:5000>;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/<도메인>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<도메인>/privkey.pem;
}
server {
if ($host = <도메인>) {
return 301 https://$host$request_uri;
}
listen 80;
server_name <도메인>;
return 404;
}
요약 설명
- location /
- 외부에서 들어오는 경로를 뜻합니다.
- /api 는 도메인/api + ? 로 접속했을 떄의 처리방식을 정의합니다.
- proxy-pass
- 위에서 정한 외부입력에 대해 EC2내에서 어디로 보낼 것인가를 나열합니다.
- 도커를 사용한다면 보통 도커의 외부 포트포워딩된 포트번호를 사용합니다.
- listen 443 ssl
- 서버는 443 포트에서 트래픽을 수신합니다.
- ssl 매개변수는 HTTPS 연결을 사용하도록 지정합니다.
- ssl 적용을 하는 구문으로 아래에 발급한 인증서 키에 대한 경로를 나열하면 됩니다.
아래에 있는 if문의 경우에는 리다이렉트 구문으로 Nginx 서버에서 특정 도메인에 대한 모든 HTTP 요청을 HTTPS로 리다이렉트 하도록 설정하는 구문입니다.
- if ($host = <도메인>)
- 요청한 도메인이 일치하는지 확인
- 일치하면 301 리다이렉트
- listen 80;
- nginx 서버가 포트 80에서 트래픽을 수신하도록 설정
- server_name <도메인>;
- 설정들이 <도메인>에 적용된다는 것을 nginx 서버에 알리는 구문
- 다른 도메인이면 다른데 적용됨
- 설정들이 <도메인>에 적용된다는 것을 nginx 서버에 알리는 구문
- RETURN 404;
- 도메인이 잘못되서 if 구문을 타지 못하고 포트 80으로 들어온 모든 요청에 대해 오류 반환
EC2 Config 적용
설정을 마쳤다면 다음을 통해서 확인 및 실제 ec2 적용
- 적용
- 적용 성공 시 success 구문이 출력
sudo nginx -t
- Nginx 재시작
- 포트 충돌 조심 (80, 443)
sudo systemctl restart nginx
- Nginx 상태 확인
sudo systemctl status nginx
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!