Nginx Jekyll 개인 서버 Https SSL 인증하기

목록으로 돌아가기

🤷‍♂️ Https?

매번 블로그 방문 때마다 https가 아닙니다. 주의하세요라는 팝업이 신경쓰였다… HTTPS(하이퍼텍스트 전송 프로토콜 보안, Hypertext Transfer Protocol Secure)는 월드 와이드 웹(WWW)을 통해 데이터를 안전하게 전송하기 위한 인터넷 통신 프로토콜 중 하나입니다!

환경

먼저 현재 사용하는 서버는 우분투 20.04 LTS이며 Nginx와 Jekyll입니다. Nginx는 고성능의 오픈 소스 웹 서버 및 리버스 프록시 서버로, 많은 웹 애플리케이션 및 웹 사이트에서 사용되는 소프트웨어입니다. Jekyll은 정적 웹 사이트 생성기로, Markdown과 Liquid 템플릿 엔진을 사용하여 간단한 텍스트 파일에서 웹 페이지를 생성하는 데 사용됩니다. 주로 블로그, 개인 웹사이트, 문서 웹사이트 등을 만드는 데 유용합니다.

1단계 Jekyll 서버 열기 (개인 블로그 서버)

먼저 준비된 배포할 서버를 대충 2000번대 위의 포트에서 자유롭게 여시면 됩니다! 아래 명령어는 Jekyll서버 구동 명령어 입니다.

# {} <-이거는 빼고 값 넣으셔야해요! 앞으로도!
sudo jekyll serve --port 4000 --host {your_public_ip_or_domain}



2단계 SSL 인증키 다운받기

먼저 apt를 업데이트 한 뒤 letsencrypt 패키지를 다운받습니다.

sudo apt update
sudo apt-get install letsencrypt

그후 이래 명령어로 SSL 키를 받습니다.

sudo certbot certonly --nginx -d {도메인(ex.com)}

치면 여러가지 질문이 나올텐데 잘 답변하세요! 그렇게 되면 아래 경로에 파일이 생깁니다.

/etc/letsencrypt/live/ {도메인 주소} /fullchain.pem 
/etc/letsencrypt/live/ {도메인 주소} /privkey.pem



3단계 Nginx 설정

이제 설정을 잡아볼 겁니다! 일단 아래 명령어로 컨피그 파일을 만들어서 주세요

sudo nano /etc/nginx/sites-available/default

만들 파일에 아래에 명령어를 차례대로 다 넣어주세요 {도메인}은 꼭 대치하셔야 해요!

server {
    listen 80;

    server_name {도메인};

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name {도메인};

    # 아까 발급받은 키 주소!
    ssl_certificate /etc/letsencrypt/live/{도메인주소}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{도메인주소}/privkey.pem;

    location / {
        proxy_pass http://{도메인주소 or ip}:{포트}; # 사설ip 추천합니다.
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    if ($host = {도메인}) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name {도메인};
    return 404; # managed by Certbot
}



4단계 포트 열기

필수적으로 포트들을 열어주어야 해요! 아래 명령어로 포트를 열어주어요

sudo ufw allow 80
sudo ufw allow 443
# 만일 외부 ip 도메인으로 연결을 했다면 해당 포트도 열어주셔야 해요
sudo ufw allow {서버포트}



5단계 Nginx 서버가동

아래 명렁어로 서버를 가동해주세요!

sudo service nginx start
# 만일 재가동을 원하면 아래입니다!
sudo service nginx restart

정상적으로 가동되는지 확인하기 위해 아래 명령어로 확인 가능합니다!

sudo systemctl status nginx
# Active: active (running)이라고 뜨면 잘 나오는겁니다!

세부적인 에러를 확인하고 싶으면 다음 파일을 조회하면 됩니다!

sudo tail -f /var/log/nginx/error.log



추가 SSL 만료

갑자기… 블로그가 다운이 됐다 바로 SSL이 만료된 것이었다.
다음 순서에 맞추어 갱신을 시켜주었다.

sudo systemctl stop nginx      # Nginx 웹 서버 중지

Certbot이 포트 80을 사용하여 HTTP-01 도메인 확인 작업을 수행하기 때문에 서버를 중단 시킨 후 갱신을 하였다.

sudo certbot renew

그 후 서버 가동을 하면 된다.

sudo systemctl start nginx      # Nginx 웹 서버 시작


author-profile
Written by 유찬영

댓글