cerbot을 활용하여 https 설정하는 방법

서희찬·2024년 4월 8일
2
post-thumbnail

다른 글들을 조합해서 하다 보니.... 매번 여러 블로그 찾아서 해야하고 막상 다 하고나서도 까먹어서 다시 찾고..이게 반복되서 그냥 내 블로그에 찾아와야겠다~ 생각 들어서 이 게시글을 쓰게 됐다.

아래 기본 셋팅과 환경에서 진행한다고 생각한다.

  1. ubuntu 환경
  • ncp든..aws든.. 뭐든 ?
  1. docker에 server, db image
  • 이미지 정도는 다른거 참고해서 받아오자
  1. http 배포
  • http 배포 또한..이미 되있는 상태라고 가정
  1. 가비아 도메인 구매
  • 암거나.. 뭐 가비아든 뭐든 DNS 설정할 수 있는건 anything?
  1. Server : 8080 port, DB 3306 POrt를 이용할거고 이 두개가 docker network 연결되있음.

그렇다면 목표는

http -> https 배포

해야할것은

  1. nginx 설정
  2. cerbot 셋팅 with DNS 설정
  3. https 기쁨 만끽하기

nginx설정

1. 본인 서버 nginix config파일에 들어가보자

경로 : etc/nginx/nginx.conf

root@swipe-jeju:/etc/nginx# vim nginx.conf 

나는 swipe-jeju라서 이렇게 들어갔다.
이제 vim으로 열어주는데 뭐 어쩌고 저쩌고~ 있는데

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/server.conf;
}

여기를 집중하자

        include /etc/nginx/sites-enabled/server.conf;

이 부분은 서버마다 다를 수 있는데 아마 기본적으로

        include /etc/nginx/sites-enabled/*;

이렇게 전체라고 되어 있을 수 있다.
그런데 일단.. 우리는 server.conf 파일을 만들어서 해당 파일을 토대로 진행해줄거니 위와 같이 적어주자.

자, 그럼 이제 뭐 해야할까?
당연히...

/etc/nginx/sites-enabled?

그런데 우리 서버에는 아마 sites-enabled, sites-available 두개가 있을거다.

이 두개 차이가 뭐냐?

nginx의 sites-enabled과 sites-available 디렉토리는 서버 설정 파일을 관리하는 데 사용됩니다.

sites-available: 이 디렉토리에는 사용 가능한 모든 사이트 설정 파일이 들어 있습니다. 이 파일들은 현재 활성화되지 않았지만 필요할 때 활성화할 수 있습니다.

sites-enabled: 이 디렉토리에는 현재 활성화된 사이트 설정 파일의 심볼릭 링크가 들어 있습니다. 이 링크들은 실제로 nginx가 사용하는 설정 파일들을 가리킵니다. 활성화된 사이트는 실제로 nginx에 의해 서비스됩니다.

일반적으로 nginx 설정에서는 sites-available에 설정 파일을 생성하고, 필요할 때 해당 파일을 sites-enabled로 심볼릭 링크를 만들어 활성화합니다. 이를 통해 설정 파일을 쉽게 활성화 및 비활성화할 수 있습니다.

뭐 이렇단다.

그치만, 우리의 관심은 https배포니 available로 이동해서 server.conf를 만들어보자

root@swipe-jeju:/etc/nginx/sites-available# vim server.conf

아까와 같이 vim으로 열어준다

upstream jeju-swiping-was {
        server 127.0.0.1:8080;
}

server {
        server_name jeju-back.swiping.kr;

        location / {
                proxy_pass http://jeju-swiping-was;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connetion upgrade;
                proxy_set_header Host $host;
                proxy_set_header Accept-Encoding gzip;
        }

}

server {
        server_name jeju-back.swiping.kr;
    listen 80;
}                

이와 같이 설정해준다

그런데... 원래 이러면 되는데 나는 요상하게 enabled를 수정해줘야 됐다
혹 모르니 그냥 지금은 둘다 저걸로 해주자.

그 후 nginx reload 또는 restart 한번 해주자

만약 reload했을때 pid 못찾아~

error: invalid PID number "" in "/var/run/nginx.pid"

이러면

sudo service nginx start

이거해주자 그냥 시작을 안해서 리스타트를 못하는거다.

참고로 리로드 리스타는

// Restart
sudo service nginx restart

// Reload
nginx -s reload

이와 같다.

뭐 어쩌고 적용됐다~ 하고 잘 뜨면 된거고 에러나면 서칭해서 찾아보자

잘됐다고 간주하고 이제 cerbot setting을 해줄거다.

1-cerbot 설치

apt-get inall certbot python3-certbot-nginx

2-도메인 연동

certbot -d {너의 도메인} --manual --preferred-challenges dns certonly

예시)
certbot -d naver.com --manual --preferred-challenges dns certonly

이러면 블라라 나오는데
y, y 누르다 보면

Please deploy a DNS TXT record under the name:
_acme-challenge.{너의 도메인 네임서버}
with the following value:

`chVJah312312937821czxlkncxznldsadnQGc`

뭐 이런 얘기가 나온다

그러면 이제 본인 도메인 DNS에 가서


이렇게 txt, a record에 추가해주자

그리고 바로 엔터 누르지말고 한 30초 정도 머엉 때리다가 엔터누르면 성공~
이라고 뜬다

그 후 http를 https로 라우팅해주는것도 해줄까 하면 y이나 엔터 누르면 된다.

그러면 거의 끝났다.

이제

certbot --nginx -d {너의 도메인}
1: Attempt to reinstall this existing certificate
2: Renew & replace the certificate (may be subject to CA rate limits)

---

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Deploying certificate

뭐 이런 얘기가 나오는데 1로 누르면 와다다 될거다.

nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx -t를 눌러서 성공적으로 된거 확인해보고

vim ./etc/nginx/nginx.conf

여기 들어가서 #certbotonly이런거 잘 있는지도 확인하고~

nginx -s reload

하면 이제 https로 접속이 성공적으로 될것이다.

뭐 그러면...빠르게 하기 위해서 명령어만 적어두겠다.
certbot부터... 엔지닉스 설명까지는 보거나 본인 방식대로 해서 어찌저쩌 되있다고 생각하고...

명령어만

  1. 서트봇 설치
apt-get inall certbot python3-certbot-nginx
  1. 적용
certbot -d {너의 도메인} --manual --preferred-challenges dns certonly
  1. 본인 도메인 구매 사이트 DNS가서 txt record 추가

  2. 적용

certbot --nginx -d {너의 도메인}
  1. 1누르기
1
nginx -t
nginx -s reload

테스트하고 리로드하기

끝~

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글