크게 두가지 방법으로 구성 할 수 있다.
- nginx 에서 https 를 적용 하고 처리하는 방법.
- AWS 서비스를 통해 적용하는 방법.
둘 다 정리를 할 필요가 있어 보인다. 일단 둘 다, 도메인은 이미 구입 하고, route53 에 설정했다는 가정하에 적는다.
- nginx 에서 처리 하는 방법
- EC2 에서, 다음의 명령을 통해 nginx 설치
sudo apt update
sudo apt install nginx -y
- lets encrypt를 이용해 인증서 발급
- 만일 ec2가 우분투 라면 다음의 커멘드 실행
sudo apt update
sudo apt install -y certbot python3-certbot-nginx
- nginx 플러그인을 이용해 자동으로 설정
//실제 url을 적어야 한다.
sudo certbot --nginx -d example.com -d www.example.com
- 이메일 등을 입력하여 인증서를 받는다. 이후 90일 마다 갱신을 해줘야 하므로, 다음의 커맨드를 입력한다.
sudo crontab -e
새벽 3시에 자동갱신하는 커맨드
0 3 * * * certbot renew --quiet
- /etc/nginx/sites-available/springboot.conf 가 있거나, 설정파일이 있으면 확인해서 아래 설정과 대조하기. (없으면 만들어야함)
server {
listen 80;
server_name example.com www.example.com; #실제 도메인 이름 입력
# http 요청을 https로 리다이렉트
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com; #실제 도메인 이름 입력
# SSL 인증서 경로 (Let’s Encrypt 기준)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 보안 옵션 (권장)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080; # Spring Boot 서버
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 적용 후 아래 커맨드를 입력하여 재실행
sudo ln -s /etc/nginx/sites-available/springboot.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
- AWS 를 통해 설정하는 법
- ACM 인증서 발급
- Certificate Manager(ACM) 으로 접속하여, 공인 인증서 요청 클릭
- 도메인 입력 하고, DNS 검증을 하여 발급 (도메인은 미리 구매하고 Route 53에 연결했어야 한다)
- EC2 설정
- Target Groups -> Create target group 클릭
- target type 는 인스턴스 혹은 ip를 입력.
- protocol은 http 입력
- 포트 80 (혹은 nginx 에서 설정한 포트번호) 입력
- 로드밸런서 설정
- EC2 -> Load balancers -> 로드밸런서 생성 (Application Load Balancer)
- 나머지 설정은 인터넷 참조하여 하고, 443 리스너에서 ACM에서 발급한 인증서 선택
- Route53 설정
- 도메인을 연결한 것을 Application Load Balancer 로 보내도록 Alias 생성
- nginx 설정
- ACM 인증서 발급
server {
listen 80; # ALB는 HTTP로 내부 전달
server_name _; # ALB가 호스트 헤더로 실제 도메인을 전달
# real IP (ALB가 X-Forwarded-For 헤더로 클라이언트 IP 전달)
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# set_real_ip_from을 VPC CIDR으로 제한해주면 안전합니다.
# set_real_ip_from 10.0.0.0/16;
location / {
proxy_pass http://127.0.0.1:8080; # Spring Boot (or upstream)
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header X-Forwarded-Port $server_port;
# 웹소켓 등 필요한 경우
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
- 필요하다면, springboot yaml 에 다음 설정 추가
- X-Forwarded 헤더를 이용하게 되므로 스프링부트에 추가 설정을 한다.
# 경우에 따라 사용
server.use-forward-headers=true'Backend > SpringBoot' 카테고리의 다른 글
| Custom Annotation (Custom validation) (0) | 2025.10.29 |
|---|---|
| Json 형식으로 로깅 하기 + MDC (0) | 2025.10.29 |
| Swagger 사용하기 (0) | 2025.09.22 |
| 간단하게 API 테스트 하기 (파일명.http) (0) | 2025.09.19 |
| REST -> RESTful 예제 (0) | 2025.09.19 |