Multi Domain을 처리하는 중인데 현재 구조가 200+ Domain을 하나의 서버에서 다 처리하고 있는 상황이다. 그러다 보니 ALB에서 root Domain이 들어오면 www domain으로 돌려줘야 하는데, 그렇게 되고 있지 않아서 ALB Listener Rule을 사용하고 있었다. 그런데 하다 보니 ALB Rule이 500개 넘으면 limit가 걸려서 ALB를 추가로 넣어줘야 하는 상황이 왔던 것이다.
ECS에서는 어차피 ALB를 더 만들어서 늘리면 되니 상관은 없지만, ALB ACM Limit가 50개 * ACM Record Limit 100EA를 하면 ALB당 5000 레코드를 처리할 수 있는 상황인데 그렇게 할 수 없어서 최대한 가성비가 나오는 부분이 있는지를 살펴 보기로 했다.
어차피 선택지는 많지 않았다.
1. Nginx 사용하여 root domain이면 www redirect
2. 어플리케이션 단에서 root domain이면 www redirect
사실 서버 설정을 크게 건드리고 싶지 않아서 개발자분에게 어플리케이션에서 할 수 있는지를 물었다.
하지만 next.js상 특정 헤더값을 변경해서 redirect를 해야 하는데 관련 미들웨어가 없어서 처리가 불가능하다는 답변을 들었다.
어쩔 수 없이 Nginx를 이용하여 root 도메인일때 www를 사용하는 방법으로 하기로 했다.
현재 스테이지 서버의 구성은 일반 도메인과 stg test용 도메인을 같이 Route 53에 물려 놓았다.
> stg-test.test.com -> nginx -> localhost:3000
> test.com -> nginx -> redirect www.test.com -> nginx -> localhost:3000
위와 같은 형태로 구현을 완료하였다.
처음엔 stg-test의 서브 도메인까지 같이 처리하기 위해서 굳이 설정을 계속 넣고 있었다.
server {
set $new_host $host;
if ($host ~* ^[^.]+\.(.*)) {
set $new_host $1;
}
if ($new_host !~ ^.*\.$) {
return 301 $scheme://www.$new_host$request_uri;
}
location / {
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;
proxy_pass http://localhost:3000/;
}
}
이런 구성으로 만들어 놓고 보니 www.test.com으로 넣을때를 제외하곤 서브 도메인이 붙은 경우에도 www를 붙이고 있었다.
stg-test라는 서브 도메인을 추가하려고 보니 문제가 되는 거 같아서
if ($host ~* ^[^.]+\.(.*)) {
set $new_host $1;
}
if ($new_host ~ \..*\.){
set $new_host "www.$new_host";
return 301 $scheme://$new_host$request_uri;
}
이런 형태로 받아 보았다.
굳이 sub domain 타입을 막을 필요가 없어 보여서 . split 배열이 2개면 앞에 www를 붙여서 보내버리기로 했다.
문제는 그 다음이다.
이렇게 하면 잘 될 줄 알았는데 안되는 것이었다.
왜인지 보니 ALB에서 헤더를 차단하는 듯한 느낌이 들었다.
그래서 Load Balancer 속성 편집에서 다음의 항목을 켰다.
혹시 ALB에서 헤더를 잘라 먹는게 아닐까 싶어서 해당 옵션을 켜고 작업을 해보니 Header Host값이 잘 넘어오는지 어플리케이션이 정상으로 동작한다.
이렇게 해보니 여러 장점이 생겼는데 아래와 같다.
ALB Listener Rule 제약 없이 ACM Limit을 최대한 누릴 수 있다.
ALB의 비용이 절감된다.
Terraform 스크립트가 줄어들어 더 경량화된다.
아직 nginx의 부하로 인해 어플리케이션이 혹시 문제가 되지 않을지는 아직 테스트를 못한 상황이지만, 어차피 사이트가 여러개라도 트래픽이 많고 한번만 redirect가 되고나면 리다이렉트된 클라이언트에선 redirect 룰을 타지 않으므로 문제가 없을 것으로 생각된다.
별 장애 없이 잘 돌아갔으면...
'AWS' 카테고리의 다른 글
AWS 자격증 100% voucher 획득방법 (~2025년 8월 31일) (0) | 2025.03.03 |
---|---|
개발팀의 일당백! Devops Engineer가 뭔가요? (0) | 2024.01.17 |
ECS Fargate에서 Cloudshell을 이용하여 shell 접근 (0) | 2023.12.11 |
테라폼 맨땅에서 부터 적용하기 3 (4) | 2023.12.05 |
슬랙에서 Notion API를 통해 문서 검색 (feat. EC2) (0) | 2023.10.17 |