ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • aws ec2에 https 웹 서버 구축
    IT 이것저것 2024. 5. 9. 00:27
    반응형

    aws 계정 및 ec2 인스턴스는 생성되어져 있다고 가정하고 구축하는 방법에 대하여 설명하고자 합니다

    추후 기회가 된다면 프리티어로 계정을 생성하고 ec2 인스턴스 생성하는 방법에 대하여 포스팅해 볼게요

    우선 무료로 dns를 받으세요

    duckdns에서 무료로 최대 5개의 dns 를 받을 수 있습니다

    혹시 고정아이피를 사용하고 있지 않다면 사이트의 install 메뉴를 참고해서 추가적인 설정을 해주세요

    Duck DNS (www.duckdns.org)

     

    Duck DNS

    Duck DNS free dynamic DNS hosted on AWS news: login with Reddit is no more - legal request support us: become a Patreon

    www.duckdns.org

     

    이제 nginx와 certbot을 통해서 https 웹 서버를 구축해 봅시다

    certbot은  let's encrypt 로부터 인증서를 발급받는 툴입니다

    설치는 도커를 통해서 진행하려고 합니다

    certbot을 통한 인증서 발급은 Let’s Encrypt으로 부터 인증 절차를 거쳐야 하고 인증 절차는 4가지 방법이 있습니다

    • webroot, webserver, standalone, dns

    저희는 webroot 방식을 사용하여 구축합니다

    docker compose 작성은 아래를 참고해주세요

    docker-compose.yml
    services:
      nginx:
        image: nginx:1.25.5-alpine
        container_name: nginx
        restart: always
        ports:
          - 80:80
          - 443:443
        command: '/bin/sh -c ''while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g "daemon off;"'''
        volumes:
          - /home/ubuntu/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
          - /home/ubuntu/docker/nginx/conf.d:/etc/nginx/conf.d
          - /home/ubuntu/docker/nginx/web:/usr/share/nginx/web
          - /home/ubuntu/docker/certbot/conf:/etc/letsencrypt
          - /home/ubuntu/docker/certbot/www:/var/www/certbot
    
      certbot:
        image: certbot/certbot:latest
        container_name: certbot
        command: certonly --webroot --webroot-path=/var/www/certbot --email useraddress --agree-tos --no-eff-email -d cu2sea.duckdns.org
        # entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
        volumes:
          - /home/ubuntu/docker/certbot/conf:/etc/letsencrypt 
          - /home/ubuntu/docker/certbot/www:/var/www/certbot
          - /home/ubuntu/docker/certbot/logs:/var/log/letsencrypt:rw

    볼륨 설정 부분은 자신의 한경에 맞게 설정해주세요

    위에 command 는 인증서 갱신을 대비해 nginx 데몬을 재시작하는 명령입니다

    주기는 6시간으로 되어져 있으나 인증서 기한은 3개월로 적당히 설정해주세요

    nginx 설정 default.conf
    server {
        listen 80;
        listen [::]:80;
        server_name cu2sea.duckdns.org;
    
        location /.well-known/acme-challenge {
            allow all;
            root /var/www/certbot;
        }
    }

     

    위와 같이 작성하고 docker compose를 실행하면 nginx와 certbot 컨테이너가 생성되며 인증서가 생성된다.

    • docker compose up -d

    인증서가 잘 발급되었는지 certbot 로그로 확인해보세요

    • docker compose logs certbot

    certbot 설정 중에 command에 해당되는 내용은 인증서를 발급받는 명령입니다

    인증서를 발급받고 나면 해당 명령을 제거하고 인증서를 갱신하는 명령어로 변경해야 합니다

    주기는 12시간으로 되어져 있으나 인증서 기한은 3개월로 적당히 설정해주세요

    docker-compose.yml에 내용을 아래와 같이 변경하자 주석을 위아래 바꿔주면 되요

    docker-compose.yml
        # command: certonly --webroot --webroot-path=/var/www/certbot --email useraddress --agree-tos --no-eff-email -d cu2sea.duckdns.org
        entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    nginx 설정 default.conf
    server {
        listen 80;
        listen [::]:80;
        server_name cu2sea.duckdns.org;
    
        location / {
            return 301 https://$host$request_uri;
        }
    
        location /.well-known/acme-challenge {
            allow all;
            root /var/www/certbot;
        }
    }
    
    server {
        listen 443 ssl;
        server_name cu2sea.duckdns.org;
        server_tokens off;
    
        ssl_certificate /etc/letsencrypt/live/cu2sea.duckdns.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cu2sea.duckdns.org/privkey.pem;
        ssl_session_cache shared:le_nginx_SSL:10m;
        ssl_session_timeout 1440m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers off;
        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    
        location / {
            root   /usr/share/nginx/web;
            index  index.html index.htm;
        }
    
        # error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/web;
        }
    }

     

    docker-compose-yml 및 nginx 설정을 변경했으면 아래 명령으로 변경사항을 적용해주세요

    • docker compose up -d

    tsl 설정은 tsl 권장설정인 아래 내용을 그대로 가지고 왔습니다

    certbot/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf at master · certbot/certbot (github.com)

    반응형
Designed by Tistory.