기타/인프라 구축과정

[Infra] 3. https 설정 (Cerbot) - Voda Project

배발자 2023. 4. 4.
반응형

Nginx 설치 

sudo apt-get install nginx

상태 확인 : sudo service nginx status
시작 : sudo service nginx start
재시작 : sudo service nginx restart
중지 : sudo service nginx stop 
설정 리로드 : sudo service nginx reload

 

Certbot

 

Certbot은 Let's Encrypt 인증서를 쉽게 발급하고 갱신할 수 있도록 도와주는 도구라고 한다. 

Let's Encrypt는 무료로 SSL/TLS 인증서를 발급해주는 인증 기관으로, HTTPS를 사용하는 웹사이트에서 보안 통신을 위해 사용된다. 

 

Certbot을 이용하면 명령어를 통해 인증서를 발급하고 갱신할 수 있으며, 이를 통해 HTTPS를 적용하는 과정을 간편하게 처리할 수 있다. Certbot은 Apache, Nginx와 같은 웹 서버와 함께 사용할 수 있으며, 다양한 운영 체제와 호환된다.

 

진행하고 있는 프로젝트에서 Nginx를 사용하며, https를 적용하기 위해 Certbot을 사용하기로 하였다. 

 

 

 

| Ubuntu 18.04 이상에서는 Python 3 버전

$ apt-get update
$ sudo apt-get install certbot
$ apt-get install python3-certbot-nginx

 

|  /etc/nginx/conf.d/voda.conf   (voda는 필자의 프로젝트 명. 초기값으로 default.conf로 되어있다) 

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name 도메인명;
}

 

이 Nginx 설정 파일은 서버에 HTTP 프로토콜을 통한 요청이 들어왔을 때, `/var/www/html` 경로의 파일을 반환하는 설정이다. 


`listen 80 default_server`와 `listen [::]:80 default_server`는 각각 IPv4와 IPv6 프로토콜을 사용하여 80번 포트에서 들어오는 요청을 처리한다는 의미이다. 

`root /var/www/html`은 Nginx가 서비스하는 웹 페이지의 루트 디렉토리를 `/var/www/html`로 설정하였다. 이 디렉토리 안에는 Nginx가 서비스하는 웹 페이지의 파일들이 위치하게 된다.

`server_name 도메인명`는 이 설정 파일이 적용되는 서버의 도메인 이름이나 IP 주소를 설정한다. 이 설정 파일이 적용된 서버에서 해당 도메인으로 들어오는 요청을 처리한다.

 

 

| NGINX 플러그인으로 인증서를 생성

$ sudo certbot --nginx -d 도메인

 

 

| 인증서 완료

Congratulations! You have successfully enabled <https://example.com> and <https://www.example.com> 

-------------------------------------------------------------------------------------
IMPORTANT NOTES: 

Congratulations! Your certificate and chain have been saved at: 
/etc/letsencrypt/live/example.com/fullchain.pem 
Your key file has been saved at: 
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2017-12-12.

 

server {

    root /home/ubuntu/test/frontend/dist;
    index index.html;

    listen 80;
    listen [::]:80;

    server_name 도메인명;

    if ($host = 도메인명) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    return 404; # managed by Certbot
}

server {

    root /home/ubuntu/test/frontend/dist;
    index index.html;

    listen [::]:443 ssl http2 ipv6only=on; # managed by Certbot
    listen 443 ssl http2; # managed by Certbot

    server_name 도메인명;

    ssl_certificate /etc/letsencrypt/live/도메인명/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/도메인명/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
      proxy_pass http://도메인명;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
    }
}

 

이것은 Nginx 웹 서버의 설정 파일이다. 이 파일은 두 개의 서버 블록을 포함하고 있다. 

첫 번째 서버 블록은 HTTP 요청을 처리한다. root 지시어를 사용하여 웹 서버의 루트 디렉토리를 /home/ubuntu/test/frontend/dist로 설정하고 index 지시어를 사용하여 인덱스 파일을 index.html로 설정한다.

 

listen 지시어를 사용하여 80 포트와 [::]:80 (IPv6) 포트에서 들어오는 연결을 수신하도록 설정하며, server_name 지시어를 사용하여 해당 도메인 이름을 사용하는 요청을 처리하도록 설정한다. 이 서버 블록은 Certbot에 의해 자동으로 구성되며, 도메인에 대한 HTTP 요청은 HTTPS로 리다이렉션된다.

 

두 번째 서버 블록은 HTTPS 요청을 처리한다. root, index, listen 및 server_name 지시어는 이전과 동일하다.  ssl_certificate, ssl_certificate_key, include 및 ssl_dhparam 지시어는 SSL 인증서 및 보안 구성을 설정한다. location 지시어는 모든 요청에 대해 proxy_pass 지시어를 사용하여 도메인으로 전달하도록 설정한다.

 

이렇게하면 Nginx는 클라이언트에서의 요청을 프록시하여 해당 도메인에서 서비스를 수신하게 된다. proxy_set_header 지시어는 X-Real-IP, X-Forwarded-For 및 Host 헤더를 설정한다. 이 서버 블록은 Certbot에 의해 자동으로 구성된다.

반응형

댓글