현제의 현재이야기

[Infra]우여곡절 https 붙이기 본문

Infra

[Infra]우여곡절 https 붙이기

현재의 현제 2023. 10. 8. 22:13

원래는 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를 달아야겠다.

 

Comments