Fastly_CDN/CDN_설정

패스틀리(Fastly), Host header에 따라 Origin서버 Routing하는 방법

CDN_SKY 2024. 10. 11. 16:04

패스틀리에서 서비스를 만들면 하나의 서비스에서 여러개의 도메인을 운영할 수 있습니다, 이 경우에 복수의 도메인이 한대의 오리진만을 사용하는 경우도 있습니다만, 한 서비스에서 복수의 도메인과 여러 대의 오리진을 운영하는 경우도 있습니다. 이 경우에 Client에서 요청되는 Host header에 따라서 해당 리퀘스트를 적절한 오리진으로 Routing해서 운영해야 할 경우가 있습니다만, 이런 경우 활용 할 수 있는 설정에 대해서 안내해 드리도록 하겠습니다.

 

 

위와 같이 복수개의 도메인을 복수개의 Origin과 같이 한 서비스에서 사용해야 하는 경우가 있습니다, 이럴 경우 여러가지 케이스가 있겠지만 예를들면 www.foo.com  의 Host header로 요청이 오면 origin.foo.com 으로 www.foo1.com 으로 요청이 오면 origin.foo1.com 으로 요청을 라우팅 해서 운영하고 싶을때가 있는데요, 이럴때 적절하게 사용 가능한 설정에 대해서 안내해 드리겠습니다. 

 

Fastly의 VCL에서 지원하는 기능에 table.lookup_backend을 사용하면 쉽게 이 기능을 구현 할 수 있습니다.

backend b0 { .host = "203.0.113.0"; }
backend b1 { .host = "203.0.113.1"; }
backend b2 { .host = "203.0.113.2"; }

table t BACKEND {
  "a.example.com": b0,
  "b.example.com": b1,
  "c.example.com": d0,
}

sub vcl_recv {
  set req.backend = table.lookup_backend(t, req.http.host, req.backend);
}

 

위의 VCL code의 예시를 보시면 먼저 b0 ~ b2 까지 3대의 Origin이 설정 되어 있고, table t Backend이 설정 되어 있습니다.

table을 보시면 Key, value가 있습니다만, key가 host Header, value가 Origin 이름 입니다.

 

그 아래 recv에 설정된 backend를 호출 하는 code를 보시면 먼저 table t 에서 Request host header를 확인해서 그거에 맞는 value(Origin 이름)을 반환해서 그 반환된 값으로 오리진을 설정하는 코드입니다.

 

더 자세한 이해를 돕기 위해서 아래의 Fiddle을 참고해 주시길 바랍니다.

 

https://fiddle.fastly.dev/fiddle/398441df

 

 

오리진 3대를 설정했고, 각 오리진은 F_origin_0 ~ 2까지의 이름을 가지고 있습니다. init subroutine에 table로 Host header와 라우팅될 Origin이름을 설정했습니다.

 

recv에는 임의로 Request host name을 설정했습니다만, b.glitch.com으로 client가 요청하면 어떻게 될까요? 네 F_origin_1 즉, httpbin.org의 오리진으로 리퀘스트가 각 됩니다.

 

이런식으로 복수개의 도메인과 오리진을 이용하고 해당 도메인을 Request host header에 따라서 각각의 오리진으로 라우팅 해야 할 시에

Table Backend를 활용하면 손쉽게 내가 의도한 오리진으로 리퀘스트를 컨트롤 할 수 있으므로, 도메인별로 별도의 서비스를 유지해야 하는 번거로움이 줄어 들게 되므로 참고해 주시길 바랍니다.

 

오늘도 긴글 읽어 주셔서 감사드리며, 다음에도 유익한 글로 찾아 오도록 하겠습니다. 감사합니다.