Programming/ETC

GCP로 node 배포하기 2. (HTTPS, SSL 인증 받기)

Juun 2024. 7. 31. 13:15
반응형

이전 글과 이어지는 내용입니다.

이전 글 내용이 궁금하신 분은 아래의 링크를 참고해주시면 됩니다.

 

https://puenti.tistory.com/97

 

[GCP] GCP로 node 배포하기 1. (네트워크, DNS 세팅)

이번 토이 프로젝트로 구글에서 제공하는 API, storage를 사용해서 간단한 서비스를 만들어 봤습니다.구글에서 제공하는 서비스를 쓰다보니 배포 역시 AWS 보단 GCP를 사용해보기로 했습니다.번외로

puenti.tistory.com

 

저번 포스팅에서 DNS 설정까지 했습니다.

이번에는 HTTPS 인증을 받기 위한 SSL 인증을 해보겠습니다.

HTTPS란 무엇인가?

HTTPS는 인터넷에서 데이터를 안전하게 주고받기 위해 사용하는 프로토콜입니다. HTTP에 SSL/TLS를 추가해 보안을 강화한 것입니다.

 

프론트엔드 서버와의 통신 시, 특정 도메인을 통해 요청을 보내는 것이 일반적입니다.

그러나 HTTP 프로토콜을 사용하는 도메인으로 요청을 보내는 경우, "Mixed Content" 오류가 발생할 수 있습니다.

이 오류는 브라우저의 보안 정책에 의해 발생하며, HTTPS를 통해 보안된 연결이 아닌 경우 브라우저에서 차단됩니다.

 

이를 방지하기 위해 SSL 인증서를 통해 도메인을 HTTPS로 설정하는 것이 중요합니다.

왜 HTTPS를 설정하는데 SSL 인증을 받아야 하는가?

  1. 데이터 암호화: SSL/TLS 인증서는 데이터를 암호화하여 중간에서 해커가 정보를 가로채거나 도청하지 못하게 합니다. 이는 사용자 이름, 비밀번호, 신용카드 정보 등의 민감한 데이터를 보호하는 데 필수적입니다.
  2. 서버 인증: SSL/TLS 인증서는 사용자가 접속하는 웹사이트가 실제로 신뢰할 수 있는 사이트인지 확인해 줍니다. 이를 통해 피싱 사이트나 가짜 웹사이트를 구분할 수 있습니다.
  3. 데이터 무결성: SSL/TLS 인증서는 데이터가 전송되는 동안 변경되지 않도록 보호합니다. 이를 통해 사용자와 웹사이트 간에 주고받는 데이터가 안전하게 도착했는지 확인할 수 있습니다.

1. Nginx && fowarding

웹 사이트 중에 도메인:3000 이런 사이트를 본적 없을겁니다.

대부분의 웹사이트들은 뒤의 포트포워딩으로 포트 번호를 감춰버립니다.

 

포트 포워딩을 통해 외부 트래픽을 내부 서버의 특정 포트로 전달하거나, Nginx와 같은 리버스 프록시 서버를 사용해 클라이언트 요청을 실제 서버로 전달하면서 포트 번호를 감춥니다. 이를 통해 사용자에게는 단순한 도메인 이름만 보이게 됩니다.

 

Nginx를 통해 포트포워딩을 진행해보고 더 나아가 HTTPS까지 적용해보겠습니다.

 

인스턴스를 실행시켜줍시다.

1.1 Nginx 설치

$ sudo apt-get install nginx
$ sudo su
$ vim /etc/nginx/nginx.conf

 

Nginx 설정

 

http { } 안의 include 바로 밑 코드 추가

server {
       server_name 도메인 주소
       listen 80;
       location / {
                proxy_set_header HOST $host;
                proxy_pass http://127.0.0.1:3000;
                proxy_redirect off;
       }
}

 

입력 후 :wq

이 설정은 지정된 도메인으로 오는 모든 HTTP 요청을 받아 로컬에서 실행 중인 3000번 포트의 애플리케이션(예: Node.js 서버)으로 전달합니다. Nginx가 리버스 프록시 역할을 하여 외부 요청을 내부 서비스로 라우팅하는 구조입니다.

 

설정 후 Nginx 재시작

$ sudo service nginx restart

 

이제는 도메인 뒤 3000 포트 없어도 잘 나옵니다.

 

2. HTTPS 설정

Certbot은 Let's Encrypt에서 제공하는 무료 SSL/TLS 인증서를 쉽게 발급받고 관리할 수 있게 해주는 도구입니다.

 

2.1 certbot 설치

$ sudo snap install --classic certbot

 

2.2 Nginx 설정

$ sudo certbot --nginx

 

영어로 등록할 도메인, 이메일 입력하라는 문구들이 나오면 순서대로 진행.

Congratulations! You have successfully enabled https://[도메인 이름]

이 메시지는 HTTPS 설정이 성공적으로 완료되었음을 나타냅니다.

 

2.3 Nginx 80 포트 설정

마지막으로 80 포트로 접속했을때 https 기본 포트인 443으로 리다이렉트 처리만 해주면 됩니다.

$ sudo su
$ vi /etc/nginx/nginx.conf

 

server {
    if ($host = 본인 도메인) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    
    listen 80 ;
    listen [::]:80 ;
    server_name 본인 도메인;
    return 404; # managed by Certbot // 제거
    return 301 https://$host$request_uri; // 추가
}

 

입력 후 :wq, Nginx 재실행해주면 됩니다.

$ sudo service nginx restart

 

설정 후 해당 등록한 도메인으로 접속해보면 https가 적용된 것을 확인할 수 있습니다.

 

 

※ 번외

GCP에서는 위 방법말고 부하 분산(로드 밸런스)를 통해 HTTPS를 설정할 수 있습니다.

다양한 방법이 있으므로 본인에게 맞는 서비스를 선택해서 적용하면 되겠습니다.

반응형

'Programming > ETC' 카테고리의 다른 글

GCP로 node 배포하기 1. (네트워크, DNS 세팅)  (0) 2024.07.30