-
aws ec2에 https 웹 서버 구축IT 이것저것 2024. 5. 9. 00:27반응형
aws 계정 및 ec2 인스턴스는 생성되어져 있다고 가정하고 구축하는 방법에 대하여 설명하고자 합니다
추후 기회가 된다면 프리티어로 계정을 생성하고 ec2 인스턴스 생성하는 방법에 대하여 포스팅해 볼게요
우선 무료로 dns를 받으세요
duckdns에서 무료로 최대 5개의 dns 를 받을 수 있습니다
혹시 고정아이피를 사용하고 있지 않다면 사이트의 install 메뉴를 참고해서 추가적인 설정을 해주세요
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 권장설정인 아래 내용을 그대로 가지고 왔습니다
반응형'IT 이것저것' 카테고리의 다른 글
aws ec2 스왑메모리 설정 (0) 2024.04.07 윈도우 11 wsl 설치 및 이것 저것 (0) 2024.03.17 nodejs로 웹서버 한방에 열어봐요 (0) 2023.03.11 포트포워딩 설정해서 밖에서 집에 접속해봐요 (0) 2023.03.11