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로 바뀜을 확인할 수 있습니다
'프로젝트' 카테고리의 다른 글
GitLab, Jenkins, Docker, S3, EC2를 활용한 CI/CD 파이프라인 구축 - (1) Webhook 설정하기 (0) | 2024.09.15 |
---|---|
Spring 프로젝트에서 일관된 API 응답 구조를 위한 BaseResponse 설계 및 구현 (0) | 2024.08.18 |
Spring Security에서 Exception Handler(예외 처리) 사용 하기 (0) | 2024.08.04 |