이 내용은 nginx를 쓰고 있는 가상서버에서는 공통적으로 가능한 ssl 세팅입니다.
1. SSL 인증서 파일 준비하기
일반적인 웹사이트의 경우, SSL 인증서를 구매하거나 Let's Encrypt 같은 무료 서비스에서 발급받아 다음과 같은 파일들을 준비합니다:
- ssl.crt 또는 certificate.crt: SSL 인증서 파일
- ssl.key 또는 private.key: 프라이빗 키 파일
2. 필요한 디렉토리 생성하기
# 해당하는 폴더를 만듭니다.
sudo mkdir -p /etc/ssl/certs
sudo mkdir -p /etc/ssl/private
3. 인증서와 키 파일 복사 및 권한 설정
# 준비된 crt와 key 파일에 대한 권한을 설정합니다.
# 보통 filezilla를 통해 파일을 업로드한 뒤 작업합니다.
sudo chmod 644 /etc/ssl/certs/ssl.crt
sudo chmod 600 /etc/ssl/private/ssl.key
4. 암호화된 키 파일 처리하기
키 파일에 암호가 설정되어 있다면, 서버 재시작시 자동으로 SSL이 적용되도록 암호를 제거합니다:
# 원본 키 파일 백업
cp /etc/ssl/private/ssl.key /etc/ssl/private/ssl.key.orig
# 암호 없는 키 파일로 변환
openssl rsa -in /etc/ssl/private/ssl.key.orig -out /etc/ssl/private/ssl.key
# 적절한 권한 다시 설정
chmod 600 /etc/ssl/private/ssl.key
5. Nginx 설정 파일 수정하기
웹사이트의 설정 파일을 수정합니다:
# nginx의 경우 sites-available 에서 http, https 등의 블록을 위해 파일을 손봐야합니다.
# 파일의 경로가 꼭 이렇진 않습니다. sites-available만 참고해주세요
vim /etc/nginx/sites-available/{YOUR-WEBSITE}
- 일반적인 웹사이트의 Nginx 설정 예시:
# HTTP 설정 - HTTPS로 리다이렉트
server {
listen 80;
server_name example.com www.example.com;
# HTTPS로 리다이렉트
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 설정
server {
listen 443 ssl;
server_name example.com www.example.com;
# SSL 인증서 설정
ssl_certificate /etc/ssl/certs/ssl.crt;
ssl_certificate_key /etc/ssl/private/ssl.key;
# SSL 프로토콜 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
# 정적 파일이 있는 루트 디렉토리 설정
root /var/www/html;
index index.html index.htm index.php;
# 기본 위치 설정
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP 처리 설정 (PHP 사용 시)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP 버전에 맞게 수정
}
# 접근 로그와 에러 로그 위치
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
}
6. Nginx 설정 테스트 및 재시작
# 설정이 올바른지 테스트
nginx -t
# 설정이 올바르면 Nginx 재시작
systemctl restart nginx
7. 방화벽 설정 확인 (필요한 경우)
# UFW 방화벽 사용 시, HTTPS 포트 개방
sudo ufw allow 443/tcp
8. 확인 및 문제 해결
웹 브라우저에서 https://example.com으로 접속하여 SSL이 제대로 적용되었는지 확인합니다. 주소 표시줄에 자물쇠 아이콘이 표시되면 성공적으로 적용된 것입니다.
문제가 발생한 경우 다음 로그 파일을 확인합니다:
# Nginx 오류 로그 확인
tail -n 100 /var/log/nginx/error.log
이런 과정으로 가상서버에서 호스팅하는 웹사이트에 SSL을 적용하는 과정이 완료되었습니다.
가비아나 AWS에서는 간편하게 설정할 수 있었고, 자동으로 적용이 되었던 부분인데
SSL을 신청 받고 /.well-known/pki-validation/ 에 http 인증용 파일을 올렸는데도 발급이 안돼서 무슨 문제인가 했어요
다른 분들에게도 도움이 되었으면 좋겠습니다