[Nginx] ZeroSSL 인증서로 Docker내 Nginx 인증하기

탱귤생귤·2024년 3월 15일
0

Infra

목록 보기
1/7

나도 다른 사람들처럼 Certbot을 이용해서 SSL인증서를 받으려고 했으나, 버전 오류로 실패하고 횟수 제한으로 막히면서 대안으로 ZeroSSL에서 인증서를 받게 됐다.

이분의 글을 읽으며 차근차근 해보니 성공함!

HTTP 파일 받기

  1. https://app.zerossl.com/dashboard 입장
  2. 도메인 입력
  3. HTTP File Upload 선택 후 Download Auth File로 다운받기

Docker의 Nginx 설정

  1. nginx 컨테이너 내부 접속

    docker exec -it nginx /bin/bash
  2. nginx 설정 파일 수정

    vim /etc/nginx/conf.d/default.conf
    • 이 때 bash: vim: command not found 나오면
      apt-get update
      apt-get install vim
  3. default.conf 에 추가

    location /.well-known/pki-validation/ {
            alias /usr/share/nginx/html/.well-known/pki-validation/;
    }
  4. /root 에서 docker-compose.yml 생성 후 내용 추가

    version: '3.9'
    
    services:
      nginx:
        image: nginx:latest
        ports:
          - "80:80"
          - "443:443"
        restart: always
        volumes:
          - ./data/nginx/pki-validation:/usr/share/nginx/html/.well-known/pki-validation
          - ./data/nginx/ssl:/etc/ssl/j10a708.p.ssafy.io
    • 호스트 파일 시스템 경로 : ./data/nginx/pki-validation
    • 컨테이너 파일 시스템 경로 : /usr/share/nginx/html/.well-known/pki-validation

💡 쉽게 표현하면 내 컴퓨터의 ./data/nginx/pki-validation 경로는 도커 컨테이너의 /usr/share/nginx/html/.well-known/pki-validation 경로이다 라는 의미에요.
내 컴퓨터의 ./data/nginx/pki-validation 경로에 123.txt 파일을 생성하면, nginx 도커 컨테이너 내의 /usr/share/nginx/html/.well-known/pki-validation 경로에 123.txt가 생기는거죠~
출처

  1. docker-compose up -d 실행
  2. HTTP 파일 ./data/nginx/pki-validation 에 추가
  3. 3번 링크로 되는지 확인

인증서 적용하기

  1. Next Step을 누르고 서버타입 정한 후 (나는 NginX로 했음. Default도 상관x) 인증서 다운
  2. ca_bundle.crt의 내용을 전부 복사해서, certficate.crt의 맨 끝에 붙여 넣기 하고 저장
      -----BEGIN CERTIFICATE-----
      어쩌고 저쩌고
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      어쩌고 저쩌고 from ca_bundle.crt
      -----END CERTIFICATE-----
  3. 인증서 3개 전부 ./data/nginx/ssl 에 넣기
  4. /etc/nginx/conf.d/default.conf 수정
        server {
            listen 80 default_server;
        
            server_name yourdomain.co.kr;
        
            server_tokens off;
        
            location /.well-known/pki-validation/ {
                alias /usr/share/nginx/html/.well-known/pki-validation/;  # 도메인 검증 파일이 위치하는 실제 경로로 변경
            }
        
            location / {
                return 301 https://$host$request_uri;
            }
        }
        
        server {
            listen  443 ssl;
            server_name yourdomain.co.kr;
        
            ssl_certificate /etc/ssl/yourdomain.co.kr/certificate.crt;
            ssl_certificate_key /etc/ssl/yourdomain.co.kr/private.key;
        }
  1. docker restart [컨테이너 아이디] 실행
  2. 도메인에 들어갔을 때 사진처럼 나오면 성공(페이지 설정을 안해줘서 https는 404페이지 뜰 것임)

0개의 댓글