http -> https
프로젝트를 무사히 배포했지만 위치 정보를 불러오지 못하는 문제가 생겼다.
navigator.geolocation으로 위치 정보를 불러왔었는데, 이는 보안 문제로 https에서만 사용이 가능하다.
하지만 http로 navigator.geolocation을 호출하니 동작하지 않았던 것이다....
1. 일단 먼저 putty를 통해 nginx를 설치해주었다. nginx를 이용해서.... 뭐가 좋은지 작성
퍼블릭ip로 접속했을 때 80으로 접속됨을 확인
2. 가비아에서 도메인 구매
3. aws route 53 접속 후
(호스팅 영역(Hosted Zone)은 특정 도메인과 해당 도메인에 대한 DNS 설정을 관리하는 컨테이너 역할을 하는 개념이다. 호스팅 영역을 통해 Amazon Route 53이 도메인 이름에 대한 트래픽을 어떻게 라우팅 할지 결정한다.)
가비아에서 구매한 도메인으로 호스팅 영역 생성
레코드 생성하고
4. 레코드 유형이 NS인 것을 살펴보면
값/트래픽 라우팅에 4개의 값이 있다.
가비아 -> 내 도메인 네임서버 설정에 들어가서
위 NS 유형의 값/트래픽 라우팅 대상 값들을 뒤에 . 빼고 전부 적용해준다.
5. certbot을 통해 letsencrypt 인증서 받기
sudo apt-get update // 업데이트
sudo apt-get install letsencrypt -y // letsencrypt 설치
sudo apt install certbot python3-certbot-nginx // certbot 라이브러리 설치
sudo service nginx start // nginx 실행
sudo certbot certonly --nginx -d 나의도메인주소 // certbot 통해 인증서 받기
1) 메일 주소 입력
2) 약관 동의 A치고 엔터
3) 메일 공유 N치고 엔터
4) 1(No Redirect) or 2(Redirect) 중에 선택 <- 2번 선택
추가(선택사항) : 아래 명령어를 통해 90일마다 만료되는 인증서 자동 갱신 가능
sudo certbot renew --dry-run
6. Nginx로 온 요청을 스프링 부트 서버로 Redirect
먼저 nginx 폴더로 이동하고
cd /etc/nginx
수정, 삭제, 생성 권한을 부여한다. (chmod 777)
sudo chmod 777 ./sites-available
sudo chmod 777 ./sites-enabled
sites-available 폴더로 이동 후 test.conf 파일을 생성한다.
cd /etc/nginx/sites-available
sudo vi ./test.conf
test.conf 파일에 아래 코드를 작성한다.
# HTTP -> HTTPS 리디렉션
server {
listen 80;
listen [::]:80;
server_name whattowear.store;
return 301 https://$host$request_uri;
}
# HTTPS 설정 및 프록시 전달
server {
listen 443 ssl;
server_name whattowear.store;
ssl_certificate /etc/letsencrypt/live/나의도메인주소/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/나의도메인주소/privkey.pem;
# Spring Boot 애플리케이션의 static 리소스 경로로 프록시
location /static/ {
proxy_pass http://127.0.0.1:8080/static/; # Spring Boot 애플리케이션이 제공하는 static 리소스
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;
}
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
작성한 test.conf 파일을 sites-enabled 폴더에 복사 후 default 파일을 삭제한다. default 파일을 삭제하는 이유는 생성한 test.conf 파일을 설정 파일로 사용하기 위함
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled // sites-enabled에 복사
cd /etc/nginx/sites-enabled // sites-enabled로 이동
rm default // default 파일 삭제
7. nginx 다시 시작
sudo service nginx restart
참고: https://hapsunny.tistory.com/58
AWS EC2 + Spring Boot + Nginx HTTPS 설정하기(feat.letsencrypt 활용)
client 요청은 HTTPS인데 서버는 HTTP라서 보안상 문제 발생! 서버도 HTTPS 설정을 해보자 1. EC2 인스턴스 생성 https://hapsunny.tistory.com/53 [AWS] Spring boot project AWS EC2 배포 (1) ✅ AWS EC2 인스턴스 생성 1. 인스
hapsunny.tistory.com