UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Fastly】サブドメインへのリダイレクト

すでにあるサイトのコンテンツの一部をサブドメインに移行したい

すでにパスが公開されているのでリダイレクトなのでFastlyでどうやるのかを調べた

まずは、DNSにてサブドメインを作成し、Fastlyではサービスとドメインを新たに作成する

ドメインの設定 | Fastly ヘルプガイド

料金はStarterプランであれば、20サービス、20ドメイン作成することができ、従量課金の場合は2ドメインまで無料

エッジクラウドの料金設定 | Fastly

リダイレクトの設定

既存パスをサブドメイン配下のパスにする方法は以下

developer.fastly.com

VCLスニペットで設定を行う

まずはinitでリダイレクトテーブルを定義する

table solution_redirects {
  "/source1": "/dest1",
  "/source2": "/dest2"
}

次にvcl_recvでエラーをトリガーし、RECV イベントからERROR イベントに移動する

if (table.contains(solution_redirects, req.url.path)) {
  error 618 "redirect";
}

このとき 600 未満の HTTP ステータス コードは仕様で予約されているため、600 ~ 699 の範囲のものを使用する

最後にvcl_errorで次のようにリダイレクト処理を行う

if (obj.status == 618 && obj.response == "redirect") {
  set obj.status = 308;
  set obj.http.Location = "https://" + req.http.host + table.lookup(solution_redirects, req.url.path) + if (std.strlen(req.url.qs) > 0, "?" req.url.qs, "");
  return (deliver);
}

この設定のテストは Fastly Fiddle で試すことができる

Fiddle - Fastly