도메인 적용 부터 https로 전환하기
업데이트:
| 도메인 적용 부터 https로 전환하기
1. 도메인 적용하기
1) 도메인 구입:
도메인 구매를 검색해서 나오는데가 가비아이기도 하고, 카페24 등등 다양한 곳에서 구입할 수 있습니다.
2) AWS Route 53 도메인 연결:
a. AWS 콘솔 로그인
b. Route 53 서비스로 이동
c. “Hosted zones” 클릭
d. “Create hosted zone” 클릭
e. 구입한 도메인 이름 입력 및 생성
f. 생성된 hosted zone에서 NS(Name Server) 레코드 확인
3) 도메인 등록 업체에서 네임서버 변경:
a. 도메인 구입 업체에서 네임서버 변경 페이지로 이동
b. AWS Route 53에서 확인한 NS레코드값으로 1차,2차,3차,4차 네임서버 정보 입력 입력
4) Route 53에서 ec2 연결:
a. Route 53 서비스에서 hosted zone 선택
b. “Create record” 클릭
c. “A” 레코드 생성
Record type: A - IPv4 address
d.Value에 EC2 인스턴스의 퍼블릭 IP 입력
e. “Create records” 클릭
5) EC2 보안 그룹 설정:
a. EC2 인스턴스의 보안 그룹 설정
b. 인바운드 규칙 추가
c. 포트 80, 443 열기
6) Nginx 설정 파일 수정:
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass http://app:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
7) init-letsencrypt.sh 파일 수정:
#!/bin/bash
domains=(yourdomain.com www.yourdomain.com)
rsa_key_size=4096
data_path="./data/certbot"
email="your-email@example.com" # SSL 인증서 발급 시 사용할 이메일 주소
# ... (스크립트의 나머지 부분)`
8)ssl 인증서 발급 및 Docker실행:
chmod +x init-letsencrypt.sh
sudo ./init-letsencrypt.sh
docker-compose up -d
2. HTTPS를 적용하는 이유
1) 보안성 강화:
HTTPS는 데이터를 암호화하여 전송하므로, 중간에 데이터를 가로채더라도 내용을 해독할 수 없습니다. 이는 민감한 정보 교환 시 보안을 크게 향상시킵니다.
2) 신뢰성 확보:
SSL/TLS 인증서를 통해 서버의 신원을 확인할 수 있어, 사용자가 접속한 웹사이트의 신뢰성을 보장받을 수 있습니다.
3) 검색 엔진 최적화(SEO) 개선:
Google 등의 주요 검색 엔진은 HTTPS를 적용한 웹사이트에 더 높은 순위를 부여합니다. 이는 웹사이트의 가시성과 트래픽 증가로 이어질 수 있습니다.
4) 쿠키 보안 강화:
HTTPS는 쿠키를 암호화하여 전송하기 때문에, 중간자 공격으로부터 사용자의 세션 정보를 보호할 수 있습니다.
5) 브라우저 호환성 및 성능 향상:
최신 브라우저들은 HTTPS를 적용한 웹사이트에 대해 다양한 최적화를 제공하며, 이는 더 나은 사용자 경험으로 이어집니다.
6) HTTP/2 프로토콜 지원:
HTTP/2는 HTTPS 환경에서만 완전히 지원되며, 이를 통해 웹페이지 로딩 속도를 크게 개선할 수 있습니다.
7) 데이터 무결성 보장:
HTTPS는 데이터 전송 중 변조를 방지하여, 사용자가 원본 그대로의 정보를 받을 수 있도록 보장합니다.
2. 설치 과정
1) Certbot 설치:
EC2 인스턴스에 직접 Certbot을 설치합니다.
sudo apt-get update
sudo apt-get install certbot
2) SSL 인증서 발급:
sudo certbot certonly --standalone -d domain.com
3) 인증서 파일 위치 확인:
/etc/letsencrypt/live/domain.com/ 디렉토리에 저장됨.
sudo certbot certonly --standalone -d domain.com
4) Nginx 설정 파일 수정 (nginx/nginx.conf):
# 이벤트 블록: Nginx의 전반적인 연결 처리 방식을 설정합니다.
events {
# 워커 프로세스가 동시에 처리할 수 있는 최대 연결 수를 설정합니다.
worker_connections 1024;
}
# HTTP 블록: 웹 서버 관련 설정을 정의합니다.
http {
# 첫 번째 서버 블록: HTTP(80포트)로 들어오는 요청을 HTTPS로 리다이렉트합니다.
server {
# 80번 포트(HTTP)로 들어오는 연결을 수신합니다.
listen 80;
# 이 서버 블록이 처리할 도메인 이름을 지정합니다.
server_name domain.com;
# HTTP로 들어온 모든 요청을 HTTPS로 영구 리다이렉트(301)합니다.
return 301 https://$server_name$request_uri;
}
# 두 번째 서버 블록: HTTPS 연결을 처리합니다.
server {
# 443번 포트(HTTPS)로 들어오는 SSL/TLS 연결을 수신합니다.
listen 443 ssl;
# 이 서버 블록이 처리할 도메인 이름을 지정합니다.
server_name domain.com;
# SSL 인증서 파일의 경로를 지정합니다.
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
# SSL 개인 키 파일의 경로를 지정합니다.
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
# 루트 위치 블록: 모든 요청에 대한 처리를 정의합니다.
location / {
# 들어온 요청을 내부의 app 서비스의 8080 포트로 전달합니다.
proxy_pass http://app:8080;
# 원본 요청의 Host 헤더를 프록시 요청에 포함시킵니다.
proxy_set_header Host $host;
# 클라이언트의 실제 IP 주소를 프록시 요청에 포함시킵니다.
proxy_set_header X-Real-IP $remote_addr;
}
}
}
5) Docker Compose 파일 수정 (docker-compose.yml):
services:
app:
image: ${IMAGE}
expose:
- "8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
env_file:
- .env
nginx:
build: ./nginx
ports:
- "80:80" -> 80포트를 443포트로 리다이렉트
- "443:443" -> 443포트로 SSL 연결 수신
volumes:
- /etc/letsencrypt:/etc/letsencrypt:ro
depends_on:
- app
6) 인증서 자동 갱신 설정:
crontab에 다음 라인을 추가합니다.
sudo crontab -e
0 12 * * * /usr/bin/certbot renew --quiet
댓글남기기