코딩과로그

https 서버를 배포해보자 (feat: 도메인 설정, express 서버 기준) 본문

Node.js

https 서버를 배포해보자 (feat: 도메인 설정, express 서버 기준)

피리음 2023. 2. 6. 22:13

이전 게시물 포트포워딩을 통한 배포 (https://sororiri.tistory.com/14)에 연장선입니다.

 

https 배포를 하게 된 경위:

현재 진행하고 있는 프로젝트에서 사용자의 위치정보를 얻어오는 API가 필요했고 위치정보는 https 프로토콜로 되어있어야만 획득이 가능했었기에 백엔드 서버를 https 로 변경할 필요성이 생겼다.

 

https 배포 방법:

순서 1. 도메인 적용:

https 배포를 하기 위해서는 도메인이 필요하다. 기존 서버 URI는 http://118.218.28.209 처럼 직접 IP주소를 입력해서 들어가는 방식이었으므로 도메인을 사용하지 않았기에 도메인을 구매했고, 도메인을 아래의 스크린샷과 같이  http://118.218.28.209 에 연결시켰다. (가비아 링크)

가비아에서 구매했으며 도메인을 내 서버 IP에 연결시켰다.

 

순서 2. 서버 내 https 보안인증서 적용:

https 를 적용시키려면 보안 인증서가 필요하다. 아래의 링크의 내용을 따라하면서 진행했다. (설명이 자세하다.)

https://unchae.tistory.com/entry/Nodejs-%EC%8B%A4%ED%8C%A8-%EC%97%86%EC%9D%B4-%EB%AC%B4%EB%A3%8C%EB%A1%9C-HTTPS-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0

 

위의 진행하면서 문제점이 두가지가 발생했다.

  - 첫번째 문제점으로, 인증서가 발급되면 아래와 같은 위치에 저장되는데 root 유저가 아니면 해당 파일에 접근을 할 수 없었다.

/etc/letsencrypt/live/${domain}/privkey.pem

 

나는 root 유저로 접속하지 않으면서 해당 파일에 접근할 수 있어야 했었고 아래의 링크를 참고하여 해결하였다.

https://stackoverflow.com/a/54903098/9770854

 - 두번째 문제점으로는, 위의 예시에는 서버 실행 시 포트를 80, 433을 사용하고 있었으나, 서버를 실행 시킬 때에 root 유저가 아니면 서버 실행 시 PORT 80, 443 을 사용할 수 없다는 점이었다. (443 은 HTTPS 전용 포트이고 80은 HTTP 전용 포트이며 0~1024 포트는 기본적으로 root 권한이다.) 

이 문제점은 포트포워딩으로 해결하였다. 라우터에서 443 포트로 받은 다음 내 서버에 5500으로 보내주도록 처리했다. 그러면 내 서버는 443 포트를 사용하지 않고 5500 포트를 사용해도 정상적으로 443 포트에 대한 처리를 할 수 있었다.

내 라우터 포트포워딩 설정
https 전용 포트(443)를 내 컴퓨터의 5500 포트로 전달하도록 설정했다.

해당 배포에 관련 PR입니다.

https://github.com/EUNTTO-s/blog-backend/pull/30