쌩로그
NginX를 이용하여 배포서버 SSL 적용하기 본문
목차
- 포스팅 개요
- 본론
2-1. NginX 설치
2-2. 로드밸런스 적용
2-3. SSL 적용 - 요약
- 살짝 푸념.
1. 포스팅 개요
HTTP 프로토콜로 통신하는 배포서버에 NginX를 이용하여 SSL인증서를 발급받아 서버가 HTTPS 프로토콜로 통신되도록 해보려고 한다.
2. 본론
2-1. NginX 설치
일단 배포 서버에 NginX를 설치해줘야 한다.
$ sudo apt-get install nginx -y # EC2에 NginX 설치
NginX를 설치한 후, 서버URL을 들어가면 다음과 같이 나온다.
그러면 NginX가 잘 설치 된 것이다.
참고로 NginX는 80포트를 기본으로 사용한다.
만약 80포트로 다른 무언가가 적용되어 있다면, 아래 화면이 나오지 않을 수도 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/f0d34458-2519-4e15-aa91-afec0d60902a/image.png)
2-2. 로드밸런스 적용
현재 서버는 톰캣으로 서버를 실행하기 때문에 8080포트와 연결되어있다.
도메인네임을 설정해줬더라도, 현재 서버에 들어가기위해선 도메인URL:8080
으로 접속해야 홈화면(index.html)이 나온다.
NginX가 로드밸런스 기능을 제공해주는데,
서버에 80포트로 접속할 때, 8080포트로 연결될 수 있도록 해자.
먼저 /etc/nginx/sites-available/default
파일을 수정 및 추가해줘야 한다.
$ sudo vi /etc/nginx/sites-available/default
위 명령어를 통해서 파일을 수정해주면 되는데, 나는 아래와 같이 적용되도록 했다.
※vi관련된 건 찾아보길 바란다. 다른 에디터를 사용해도 된다.
server {
listen 80;
server_name 서버도메인URL www.서버도메인URL;
location / {
proxy_pass http://localhost:8080;
}
}
✅참고로 location에 proxy_pass
말고, return
도 줄 수 있는데, 둘의 차이는 사용자가 바뀐 Url을 알 수 있는지 없는지에 대한 여부차이다. 참고블로그
내가 적용한 장면이다. (지금 보니깐 주석 없애도 될 거 같다..;;)
참고로 :set nu
로 확인하면 대략 80번대 라인에 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/385380e2-1473-4f8f-981d-5ef7076ce4fc/image.png)
적용하려면 NginX를 재시작해주면 된다.
$ sudo service nginx restart
그러면, 서버 도메인에 8080포트를 주지 않더라도 서버의 홈페이지에 접속이 가능하다.
![](https://velog.velcdn.com/images/tjdtn4484/post/0c6c08fa-5c2b-4014-a699-a492fc5fec84/image.png)
2-3. SSL 적용
이제 SSL을 적용해보자.
먼저 snap을 설치해준다.
# certbot을 snap 명령어로 설치, 실행하기 때문에 snap을 먼저 설치한다
$ sudo snap install core
$ sudo snap refresh core
다음 명령어는 기존에 설치된 certbot을 제거하는 명령어이다.
$ sudo apt-get remove certbot
공식문서의 설명을 GPT가 해석해주기를
![](https://velog.velcdn.com/images/tjdtn4484/post/a5ac922e-7da2-45b5-b08a-f4ab1f699212/image.png)
이제 막 설치해서 상관없지만, 혹시나 해주자
그리고 let's Encrypt
을 통해서 SSL을 적용하기위해 certbot을 설치하자.
# certbot 설치
$ sudo snap install --classic certbot
# snap을 통해서 certbot 명령어가 실행될 수 있도록 해준다.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
아래 명령어는 SSL을 적용할 명령어다
$ sudo sudo certbot --nginx -d 서버도메인URL -d www.서버도메인URL
참고로 -d
옵션과 함께 추가된 도메인URL
은 DNS로 등록이 되어있어야 한다.
그러면 SSL을 발급받기 위해 세가지 과정을 거치는데,
첫 번째는 이메일 주소를 기재해줘야 한다.
![](https://velog.velcdn.com/images/tjdtn4484/post/396bdf94-ed78-4b6e-a18e-41af3fc3bb75/image.png)
두 번째로 letsencrypt의 약관을 동의하는지 여부를 묻는다.Y
를 눌러준다.
![](https://velog.velcdn.com/images/tjdtn4484/post/d5af4e82-3aad-442b-9d39-529695e34e9d/image.png)
세 번째로 이메일 주소를 let's encrypt 재단에 공유해줄 수 있냐고 한다.(한국이랑 똑같다... 제 3자에게 정보제공 하겠냐는 비슷한 느낌인데..;;)
참고로 는 N
을 선택했다.
성공적으로 완료되면 아래와 같은 화면이 나온다.
![](https://velog.velcdn.com/images/tjdtn4484/post/3909058d-8dc4-4e3a-b1ec-fce011f78178/image.png)
만료기한은 90일임을 확인할 수 있다. (6월30일에 발급받았고, 2023-09-28
이라고 나와있다.)
그리고 /etc/nginx/sites-enabled/default
파일에 설정한 도메인들에 SSL이 적용되어 https
프로토로 통신이 가능하다고 알려준다.
아 명령어로 자동으로 리뉴얼이 적용되고 있는지 확인할 수 있다.
$ sudo certbot renew --dry-run
그리고 처음에 우리가 로드밸런스를 적용하기 위해 수정했던, /etc/nginx/sites-available/default
파일을 확인해보면, 내용이 수정되어있다.
아마 443 숫자가 보일터인데, SSL이 적용된 것이다.
마지막으로 배포서버를 접속해보면 SSL이 적용되었음을 확인할 수 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/072406ab-f49e-4d23-852a-258a016fccff/image.png)
3. 요약
NginX를 설치하고, 로드밸런스도 간단하게 적용해보았다.
NginX를 통해서 정말 쉽고 간단하게 서버에 HTTPS 프로토콜을 적용했다.
이후 그럼 왜 나는 서버에 HTTPS를 적용했는지, HTTPS에 대해서 알아보고 왜 적용하게 되었는지에 대한 생각을 풀어보는 글을 작성해보도록 하겠다.
4. 살짝 푸념
요사이 고민 없는 과정에 대한 글만 포스팅한 거 같다..
내키진 않았지만,, 해야했기에 했다..
최근에 다시 배포하게 생겨서 자료도 같이 모으고 포스팅도 같이한다고 배포에만 미쳐있었는데, 슬슬 이제 개발과 관련된 고민에 대한 글이 나올 때가 된 거 같다..
요번 프로젝트로 ㄹㅇ 진짜 뭐 많이 배운다....