django Allowed hosts with aws elb
아래와 같이 쓰여져 있는데 회사에서는 ECS를 사용하고 있으므로 ECS의 프라이빗IP를 설정해줘야한다.
문제는 deploy될 때 프라이빗 IP가 바뀐다는 것이다. 이는 장고가 들어있는 컨테이너를 deploy를 하고 나서 ip를 알수 있을테니, 처음부터 정확한 프라이빗 ip를 장고의 allowed hosts에 설정하는 것은 지금으로서는 방법이 떠오르지 않는다.
취할 수 있는 해결책으로는 아래의 3개다.
- 프라이빗ip의 액세스를 허가하는 것. → 책이 오면 판단한다. 구니콘이나 nginx, elb등에서 제어할수 있을지도?
- ecs의 컨테이너에 route53으로 프라이빗 도메인을 설정하고 elb에서 health check할때 프라이빗 ip가 아닌, 프라이빗 도메인으로 할수 있으면 할수 있도록 설정한다. → 프라이빗 도메인을 설정하는 부분이 없다.
- nginx 설정에서 허가할 도메인 말고는 전부 블록한다.
3번과 밑에 블록에 쓴, 동적으로 container의 Priavate IP address를 취득하도록 할 것이다.
참고로 Application Load Balancer는 health check를 할 때 타겟그룹의 타겟의 Priavate IP address을 host header로 사용한다.
AWS Application Load Balancer は、http://アプリがデプロイされているEC2のプライベートIP
にアクセスして、ヘルスチェックを行います。
Reference
AWS ALB のヘルスチェックと Django の ALLOWED_HOSTS - 猫でもわかる Web プログラミングと副業
aws alb invalid host header error django
- AWS ALB의 리스너에 규칙을 설정한다. api server에 사용하고 있는 도메인만 허용하고 나머지는 고정반환 503으로 처리
- 동적으로 ecs container의 사설 ip를 추가한다. 코드는 아래와 같다.
1의 대책으로 허용된 host header 이외에는 전부 블록, 2의 대책으로 alb의 health check에 사용되는 container의 사설 ip를 ALLOWED_HOSTS에 추가할 수 있다.
ECS_CONTAINER_METADATA_URI_V4 = os.environ.get("ECS_CONTAINER_METADATA_URI_V4")
container_metadata = requests.get(ECS_CONTAINER_METADATA_URI_V4).json()
ALLOWED_HOSTS.append(container_metadata["Networks"][0]["IPv4Addresses"][0])
Reference
Application Load Balancer のヘルスチェックの失敗をトラブルシューティングする
Django ALLOWED_HOSTS for Amazon ELB
AWS ALB のヘルスチェックと Django の ALLOWED_HOSTS - 猫でもわかる Web プログラミングと副業
When deploying Django into AWS Fargate how do you add the local ip into ALLOWED_HOSTS
'Django' 카테고리의 다른 글
django fixture dumpdata (0) | 2023.02.20 |
---|---|
Django CharField editable (0) | 2023.02.09 |
Django 데이터베이스 mysql 설정하기 (0) | 2023.02.05 |
Django-environ 패키지를 활용한 Django 환경변수 설정 (0) | 2023.02.01 |