본문 바로가기

NCP

[NCP] Nginx를 이용하여 https로 배포하기

반응형

준비사항

  • 구매한 도메인 주소
  • SSL 인증서
    도메인 주소는 가비아와 같은 대행업체를 통해 구매하면 된다.
    SSL 인증서는 Let's encrypt를 이용한다.

시나리오

클라이언트 개발자의 요청사항으로 WAS를 http가 아닌 https 프로토콜로 배포해야한다.

착오사항


SSL 인증서를 등록하기 위해서는 구매한 도메인 주소가 필요하다. 일반적으로 도메인 주소와 SSL 인증서는 일대일 관계를 가진다.
여러 개의 서버를 사용하는 경우, DNS 서버에 등록해야 할 주소는 도메인 주소이다. 스프링 부트로 배포한 WAS의 IP주소를 DNS 서버에 등록하고 SSL 인증서를 발급받은 것은 일반적이다. 이 도메인 주소를 통해 WAS에 접근하고, SSL 인증서를 통해 안전한 통신을 할 수 있다.

문제 상황 발생 : WAS가 여러대일 경우 그만큼 SSL 인증서 발급이 필요해진다.

해결 방안 : Nginx 웹 서버를 사용하여 클라이언트 단인 React 서버와 WAS 사이에 SSL 인증서를 관리한다.

  • Nginx는 reverse proxy 기능을 제공하여 클라이언트 요청을 받아서 웹 서버로 전달하고, 응답을 클라이언트에 반환한다.
  • 따라서, SSL 인증서는 Nginx 서버에 설치하고, 클라언트와의 통신을 암호화 할 수 있다.
  • Nginx를 React와 WAS 사이에 구축하여 WAS 가 수평확장되어도 SSL 인증서를 여러개 발급할 필요가 없다.

이제 레코드를 추가해주자.

SSL 인증서 발급

Let's Encrypt은 무료로 SSL 인증서를 발급받을 수 있는 인증기관이다.
Let's Encrypt을 사용하여 SSL 인증서를 발급받으려면 certbot이라는 프로그램을 사용해야한다.

  • nginx 설치
sudo apt-get update
sudo apt install nginx

nginx 를 설치한 후 포트포워딩을 해주어야 한다.
지금 상태로 Nginx를 실행하면 오류가 발생한다.
그 이유는 Nginx는 기본적으로 80번 포트를 할당받아 외부와 통신하는데 우분투에서 80번 포트는 Apache가 사용하고 있기 때문이다.

fuser -k -n tcp 80


80포트를 사용하는 프로세서를 kill 해주었다.
이제 nginx 를 시작해준다.

sudo systemctl start nginx


nginx.conf 파일 설정해준다.

  • 이제 certbot 설치한다.
sudo snap install certbot --classic
  • 인증서 발급한다.
sudo certbot --nginx
  • 접속 확인 한다.