본문 바로가기

프로젝트

Nginx를 이용하여 HTTP를 HTTPS로 리다이렉트하는 방법

HTTPS로 리다이렉트 해야 하는 이유

 

- HTTP는 평문으로 데이터를 주고받기 때문에 네트워크에서 쉽게 도청될 수 있는 보안 취약점 존재

- HTTPS는 SSL/TLS 인증서를 통해 데이터를 암호화하여 전송

- HTTP를 HTTPS로 리다이렉트함으로 서버 통신 간의 보안을 강화할 수 있음

 

Nginx 설치
sudo apt update #패키지 목록 업데이트
sudo apt install nginx -y #Nginx 설치
sudo systemctl status nginx #Nginx 설치 확인, active (running) 확인
sudo ufw allow 80 #HTTP 포트 열기
sudo ufw allow 443 #HTTPS 포트 열기

 

브라우저에서 서버의 IP 주소 또는 도메인 이름으로 접속하였을 때 Nginx 환영 페이지가 나온다면 설치 성공입니다

SSL 인증서 발급

 

SSL 인증서는 HTTP 요청을 HTTPS로 암호화하는 데 사용합니다

무료로 SSL 인증서를 발급받을 수 있는 Let's Encrypt를 사용하여 발급 받아 봅시다.

 

sudo apt install certbot python3-certbot-nginx -y #Certbot 및 Nginx 플러그인 설치
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com #인증서 발급, 여러 도메인 지정 가능

 

Let's Encrypt 인증서는 90일 동안 유효하고 자동으로 갱신이 됩니다.

갱신이 제대로 작동되는지는 아래 명령어로 확인이 가능합니다

 

sudo certbot renew --dry-run

 

인증서 설정

 

sudo nano /etc/nginx/sites-available/default #설정 파일로 접속

 

- 설정 파일

server {
    listen 80;
    server_name yourdomain.com;

    # 모든 HTTP 요청을 HTTPS로 리다이렉트
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    # 도메인 입력
    server_name yourdomain;

    ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem; # 공개키
    ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem; # 비공개키
    include /etc/letsencrypt/options-ssl-nginx.conf; # 기본 보안 설정
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 키 생성 강도, 키 교환 보안 강화


    location / { # 요청과 일치하는 경로 처리할 방법 지정
        proxy_pass http://localhost:8080;  # 요청을 전달한 주소
        proxy_set_header Host $host; # Host # $host 변수(서버 이름)로 설정
        proxy_set_header X-Real-IP $remote_addr; # $remote_addr(실제 IP 주소) 변수로 설정
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # $proxy_add_x_forwarded_for(청의 모든 클라이언트 IP 주소를 포함한 목록) 변수로 설정 
        proxy_set_header X-Forwarded-Proto $scheme; $scheme 변수(요청의 프로토콜)로 설정
    }
}

 

80번 포트로 오는 요청(HTTP)는 443(HTTPS)로 보내지고 HTTPS로 오는 location에서 지정한 경로와 일치하는 요청은 지정한 주소로  전달됩니다

이제 설정을 끝냈으니 적용 시키기 위해 nginx를 재시작 합시다

 

sudo nginx -t # nginx 설정 파일의 구문 오류 확인
sudo systemctl restart nginx # nginx 재시작, 변경 사항 적용

 

이제 HTTP로 도메인에 접속해보면 HTTPS로 바뀜을 확인할 수 있습니다