잘 참고하고 있던 사이트에 작성된 코드가 제대로 되지 않아서 새로 써보는 글이다.
Spring Boot Server에 HTTPS 설정을 하기 위해서 사용한다.
설치법
ubuntu certbot 설치
apt-get -y install letscript
인증서 발급 순서
- certbot을 통한 SSL 발급
sudo certbot certonly --standalone
- PKCS12 파일로 변환
생성된 인증서는 /etc/letsencrypt/live
폴더에 존재할텐데 해당 폴더로 가서
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore-aws.p12
위와 같이 명령어를 치면 PKCS12로 변환이 된다. 나는 keystore-aws.p12
이라는 이름으로 파일명을 정했다.
- 프로젝트의 src/main/resources 로 옮김
옮긴 후 나는 혹시나를 위해서
sudo chown -R $(whoami) keystore-aws.pem
sudo chmod 444 keystore-aws.pem
명령어를 통해 권한을 수정해줬다.
- application.yaml 파일에 아래 내용 추가
server:
ssl:
key-store: classpath:keystore-aws.p12
key-store-type: PKCS12
key-store-password: [설정한 패스워드]
Nginx와 HTTPS 설정
위 게시물을 참조해서 nginx 설정을 한 다음, /etc/nginx/sites-available
에 /api.anycode.review
폴더와 /api.anycode.review/springworld.site
파일을 만들어주고 파일 내용을 수정해준다.
server {
listen 80;
server_name api.anycode.review;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name api.anycode.review;
ssl_certificate /etc/letsencrypt/live/api.anycode.review/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/api.anycode.review/privkey.pem;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location /api {
proxy_pass http://localhost:8080/api; # 프록시 대상 주소
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 /swagger-ui {
proxy_pass http://localhost:8080/swagger-ui; # 프록시 대상 주소
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 /v3 {
proxy_pass http://localhost:8080/v3; # 프록시 대상 주소
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;
}
}
눈치껏 대충 알아볼 수 있는 코드라서 따로 주석이 필요 없으리라 믿는다.
그리고 위 설정 파일을 /etc/nginx/sites-enabled
에 맵핑을 시킨다. 명령어 👇
sudo ln -s /etc/nginx/sites-available/api.anycode.review/springworld.site /etc/nginx/sites-enabled/
nginx를 재시작 시켜주면 https://api.anycode.review/swagger
or https://api.anycode.review/api
로 가는 대부분의 (아직 설정 못한것이 있을 수 있음) 요청이 localhost:8080
으로 가도록 reverse proxy가 설정된 것을 알 수 있다.
github secrets 등록
github secrets에 keystore.p12 파일을 그대로 읽어서 올리는게 아니라 base64로 인코딩하는 과정이 필요하다.
아래 명령어를 사용해서 base64 encoding된 파일을 github secrets에 등록하면 된다.
openssl base64 -in [keystore file path] -out [base64 file path]
Reference
'Spring > Best Practice' 카테고리의 다른 글
Spring Boot 동영상/파일 업로드 (0) | 2024.03.04 |
---|