현제의 현재이야기
[Infra]우여곡절 https 붙이기 본문
원래는 ACM과 Route53으로 https를 붙이려고 했으나, 우리는 서버가 두 개 였기에 하나의 호스팅 영역의 네임서버 밖에 등록하지 못하기에... https를 서버에서 달아줘야 하는 소요가 발생했다.
처음에 letsencrypt로 달려고 했으나, 시간이 없어서 zerossl에서 직접 달았다.
https://help.zerossl.com/hc/en-us/articles/360058295894-Installing-SSL-Certificate-on-NGINX
중요한 점은 ca~.crt와 certificate.crt를 합쳐야 한다는 점이다. 순서를 맞춰서 합친 다음에 도커 볼륨을 맞춰주고 nginx 파일을 수정하였다.
version: '3'
services:
nginx:
build: ./config/nginx
ports:
- 80:80
- 443:443
volumes:
- static_volume:/static
- ./etc/:/etc/ssl
image: 550581268183.dkr.ecr.ap-northeast-2.amazonaws.com/hufs-sports-live-web:latest
depends_on:
- web
platform: linux/amd64
web:
build:
context: .
dockerfile: ./config/web/Dockerfile
volumes:
- static_volume:/project/data/static
- ./:/code
command: ["./start.sh"]
ports:
- "8000:8000"
platform: linux/amd64
image: 550581268183.dkr.ecr.ap-northeast-2.amazonaws.com/hufs-sports-live-nginx:latest
environment:
- DJANGO_SETTINGS_MODULE=sports_live.settings.prod
env_file:
- .env
volumes:
static_volume:
- /etc/ssl 경로로 저장해야되는 것 같다. 도커 볼륨으로 마운트해준다.
- 그리고 호스트의 etc 폴더에 합친 certificate.crt와 private.key를 넣어준다.
그리고 nginx.conf 파일을 설정한다.
server {
listen 80;
server_name backoffice.hufstreaming.site;
server_tokens off;
return 301 https://$host$request_uri; #http -> https 로 리다이렉트 시킴 필요없으면 안써도됨
}
server {
listen 443 ssl;
server_name backoffice.hufstreaming.site;
ssl_certificate /etc/ssl/certificate.crt;
ssl_certificate_key /etc/ssl/private.key;
location /static/ {
alias /static/;
}
# 프록시 설정, nginx 뒤에 WAS가 있을 경우
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://web:8000/;
proxy_redirect off;
}
}
- 처음에 80을 리슨, 그리고 모든 접속을 https로 날려버린다. 긜고 443에는 설정해둔 경로로 crt 파일과 key파일을 넣어준다. 그리고 location으로 모든 접속은 http://web:8000으로 호스팅 해준다. 처음에 그냥 80이라고 했다가 502에러가 났었다. 도커 컴포즈 파일을 보면 web 컨테이너는 8000포트로 받아서 내부로 8000으로 이어주기 때문에, web:80이 아니라 web:8000 포트로 받아줘야 했다.
근데 문제는 90일마다 인증서를 갈아줘야 돼서 에러 사항이다. 더군다나 무료로 3개밖에 만들지 못하기 때문에 임시 방편인 느낌.
그래서 하루빨리 letsencrypt를 달아야겠다.
'Infra' 카테고리의 다른 글
[Infra] 잊지말자 CodeDeploy (1) | 2023.10.13 |
---|---|
[DevOps] 쿠버네티스 관련 (0) | 2023.09.20 |
[DevOps] 험난한 리액트 S3 + CloudFront 배포기 (0) | 2023.08.11 |
[DevOps] 도커에 Celery 및 서버 https 추가 (0) | 2023.08.08 |
[DevOps] django channel 연결기 (0) | 2023.07.30 |
Comments