S E P H ' S

[Nginx] HTTPS 적용 및 Backend API Location 설정 본문

Programing & Coding/Server 구축 및 CI&CD

[Nginx] HTTPS 적용 및 Backend API Location 설정

yoseph0310 2021. 11. 23. 20:26

지난 Nginx 포스팅에 이어서 이번 포스팅에서는 let's encrypt로 https를 적용하고 backend location 설정에 대한 내용을 다루겠습니다. 

 

Certbot 설치

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get upgrade
sudo apt-get install python-certbot-nginx

# sudo apt-get install python-certbot-nginx 명령어에서 python 관련 메세지가 나온다면
# sudo apt-get install python3-certbot-nginx 로 실행하시면 됩니다.

 

Let's Encrypt 인증서 발급

 

sudo certbot certonly --nginx -d [도메인 주소]
-> SSL인증 이메일 입력 (다른 곳에 반드시 메모필수!), A, Y, 2

 

완료 하셨다면 다음과 같이 메세지가 나오면서 SSL 인증서가 발급된 것을 확인하실 수 있습니다.

Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/[도메인주소]/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/[도메인주소]/privkey.pem

fullchain.pemprivkey.pem을 복사해서 보관해두시길 바랍니다.

 

Nginx SSL 인증서 관련 설정

지난 포스팅에서 구축했던 /etc/nginx/sites-available에 생성했던 conf 파일에 vi로 접근합니다.

80 포트에 관한 설정 밑에 다음 내용을 추가합니다.

 

server {
        listen 443;
        listen [::]:443;
        ssl on; #ssl 활성화
        server_name _;

        ssl_certificate /etc/letsencrypt/live/[도메인주소]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[도메인주소]/privkey.pem;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                root /home/ubuntu/S05P31A201/promise_web/dist;
                index index.html index.htm;
                # try_files $uri /index.html;
                try_files $uri $uri/ =404;
        }

}

443 포트는 HTTPS 가 사용하는 기본 포트입니다. 이곳에서 ssl on으로 SSL을 활성화 하고 let's encrypt로 발급받은 SSL 인증서를 적어주면 됩니다.

지난 포스트에서 conf 파일이 변경되면 변경된 점을 적용시키기 위해 nginx을 재시작했었습니다. 마찬가지로 위의 설정을 추가했다면

nginx를 중단한뒤 재시작해주시면 됩니다.

 

* SSL 자동 갱신

 

Let's Encrypt인증서는 90일 동안 유효합니다. 따라서, 자동으로 갱신하려면 다음 명령어를 실행하시면 됩니다.

sudo certbot renew --dry-run

 

Backend API Location 설정

Location 설정은 다음과 같이 진행하면 됩니다.

 

마찬가지로 /etc/nginx/sites-available 의 conf 파일을 vi로 설정하겠습니다.

server {

		...

        location /api {
                proxy_pass http://localhost:8080;
        }
}

예시에서는 location /api로 경로를 설정해 주었습니다. 이는 백엔드 서버 루트 경로에 따라서 다르게 적으면 됩니다.

블록안에 proxy_pass 다음에 백엔드 서버가 실행되고 있는 포트를 명시해주면 됩니다.

예를 들어, 서버에 배포되어 있는 스프링 백엔드 서버가 9090포트로 실행되고 있다면 블록 안에 다음과 같이 작성하면 됩니다.

proxy_pass http://localhost:9090;

 

이제 외부에서 백엔드 API를 요청할때 [서버도메인]/api 로 요청하면 됩니다.

클라이언트가 [서버도메인]/api 으로 접근하면 서버는 Nginx의 프록시 설정으로 인해 서버상에서 실행되고 있는 9090포트에서 데이터를 받아오게 됩니다.

 

HTTPS 설정이 필요한 이유

가장 큰 이유는 암호화, 데이터무결성, 인증 의 세가지 정도가 있습니다.

더 자세한 설명은 아래 참고링크에서 더 살펴봐주시면 감사하겠습니다.

 

위와 같은 이유로 수많은 Open API나 라이브러리들이 HTTPS 환경에서만 기능을 제공하는 경우가 많습니다. 즉, 안전하고 신뢰도 있는 웹 프로그램을 개발하시려면 반드시 고려해야합니다.

 

 

 

 

참고링크

https://happylulurara.tistory.com/147

 

[ubuntu]nginx let's encrypt로 https적용

happylulurara.tistory.com/146 가비아 도메인 적용 EC2 ubuntu 가비아나 다른 사이트를 통해 도메인을 적용하도록 한다. 일단 '가비아'를 검색해서 사이트로 들어갔다. 가비아로 들어가서 원하는 도메인 이

happylulurara.tistory.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ucert&logNo=221182180093 

 

웹사이트를 HTTPS로 이동하는 5가지 이유

아직도 웹사이트가 HTTP로 되어있나요?! HTTPS로 전환하지 않았다면 다시 한번 더 생각해보는 게 ...

blog.naver.com