엔진엑스 [Nginx] Let’s Encrypt 인증서 무료로 발급받고 적용하기

이전 엔진 엑스 설치 글을 포함하여 Conf 수정하는 것 을 모르신다면 아래의 설명을 참고 해서 먼저 세팅 후 이 글을 참고 해서 진행하시기 바랍니다.

이제 SSL 인증서를 발급해 보겠습니다. 2021년 대부분의 사이트는 모두 http 프로토콜 방식으로 변경하였습니다.

이제 인증서를 적용하지 않은 웹사이트는 Chrome 기준 “안전하지 않음” 이라고 표시됩니다. 그래서 Let’s Encrypt 무료 인증서를 발급받아 사용할 겁니다.

sudo apt install letsencrypt

설치가 완료되면

(sudo) letsencrypt certonly –webroot –webroot-path=/나의 웹파일 경로 -d blog.ifixcomputer.org -d 또다른도메인 -d 또다른도메인2 …

위 명령어와 같이 인증서를 발급받을 도메인 명 과 그 도메인 명이 가르키는 웹파일 경로를 적어줘야 합니다. 위 명령어의 상세 설명은 다음과 같습니다.

-d 서브도메인 입력서브도메인 추가시에 사용합니다. 예를 들어 blog1.ifixcomputer.org , blog3.ifixcomputer 이 두개에 대해서 인증서를 추가하고 싶을 시 ~~~ -d blog.ifixcomputer.org -d blog3.ifixcomputer.og 요런식으로 입력하면 되겠죠!
–webroot-path=/루트 디렉토리path=”웹파일 루트 경로” 를 입력하는 곳입니다. 여기에 정확하게 기입을 해야 나중에 갱신 또는 신규발급 때 루트 경로를 잘 못 적어서 갱신이 안되는 경우가 생길 수 있습니다. 그러니 반드시 정확한 웹파일에 루트 디렉토리를 입력해 줘야 합니다.

저는 아래와 같이 작성하였습니다.

letsencrypt certonly –webroot –webroot-path=/var/www/html/ -d blog.ifixcomputer.org

저는, 저의 블로그 인증서를 발급받기 위해 저렇게 입력하였습니다.

정확하게 설정하셨다면 아래와 같이 나오고 인증서 발급이 완료됩니다.

인증서 발급이 완료된 모습

인증서 발급 위치는 Ubuntu 20.04 기준으로 /etc/letsencrypt/live/ 디렉토리 안에 있습니다. 만약 자기 인증서 파일 이름이 생각 나지 않을 경우 root 권한을 사용해서 들어가서 보시기 바랍니다 (live폴더 안의 권한을 변경하는 것은 매우 추천드리지 않습니다.)

이제 conf 파일로 이동하여 기존에 있던 내용을 수정하겠습니다.

#변경전 conf 파일 일부분
server {
        #listen 443 ssl http2;
        listen 80;
server_name blog.ifixcomputer.org;
        root /var/www/html/redredgroup_blog/;
        index index.php index.html;
        client_max_body_size 4G;

           location / {
           try_files $uri $uri/ /index.php?$args;
           index index.php index.html;}
.
.
.




#변경후 conf 파일 일부분
server {
        listen 80;
        server_name blog.ifixcomputer.org ;
            if ($host = blog.ifixcomputer.org) {
       return 301 https://$host$request_uri;
        }
}

server {
        listen 443 ssl http2;
        server_name blog.ifixcomputer.org;
        ssl_certificate "/etc/letsencrypt/live/blog.ifixcomputer.org/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/blog.ifixcomputer.org/privkey.pem";
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        root /var/www/html/redredgroup_blog/;
        index index.php index.html;
        client_max_body_size 4G;


                location / {
                try_files $uri $uri/ /index.php?$args;
                index index.php index.html;}

변경전에는 listen 포트가 80이였지만 이제는 https 프로토콜 포트인 443으로 변경해줬습니다. 그리고 이전 http 프로토콜을 사용해서도 자동으로 리다리엑트 되게 위 변경한 코드처럼 80번으로 들어온 것들은 모두 return 301 https://$host$request_uri; https://요청한주소 로 이동하도록 하였습니다.

중요 : (80포트 요청처리를 안하면 다른 페이지가 표시되거나 404오류가 날 수 있기 때문에 필수로 해주셔야 합니다. )

이제 conf 파일 수정을 완료하였다면 sudo service nginx restart 를 입력하여 엔진엑스 서버를 재시동 하여 줍니다.

변경전

변경 후

위처럼 “안전함”으로 변경되고 https 연결로 변한걸 볼 수 있습니다.

인증서 설정이 완료됬습니다. 근데 이 Let’sEncrypt 인증서는 3개월마다 갱신을 해줘야 합니다. 일일이 3개워에 한번씩 처주는 것보다 cron 에 새벽시간쯤 자동으로 갱신 해주는 스크립트를 삽입할 겁니다.

sudo crontab -e (저는 nano 편집기로 열었습니다)

05 4 * * 7 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
15 4 * * 7 /usr/sbin/service nginx reload

맨 아래에 위에 코드를 입력해 주세요!

코드 설명은

매주 일요일 04시 5분에 renew 명령을 실행하고 그 로그를

/var/log/le-renew.log 

이 이 파일에 작성하게 하였습니다.

그리고 매주 일요일 04시 15분에 엔진엑스를 재시동하는 스크립트도 같이 넣었습니다.

이제 저장 (Ctrl + s) 후 종료 (Ctrl + x) 을 해줍니다.

그다음 sudo service cron reload 를 입력하여 cron 스케줄을 재시동 해줍니다.

이제 https 인증서 작업이 끝났습니다! 여기까지 오시느라 수고하셨습니다 ^^

다음시간에는 엔진엑스 conf 파일에 다른 파일 Include 및 ip 차단 및 허용 에 대해서 설명드리겠습니다.

감사합니다 !

0 0 votes
Article Rating
Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] NGINX 에서 인증서 발급, crontab 이용해서 매주 인증서 갱신 방법 […]