条件の使用
最終更新日 2018-10-02
条件は、Varnish Configuration Language (VCL)を使用して、キャッシュサーバーへのリクエストを処理する際に設定オブジェクトを適用するタイミングを定義します。条件に関する基本知識をある程度お持ちの場合は、このガイドを通じて、Fastly コントロールパネルで条件を作成する方法と使用するタイミングについてご理解いただけます。
条件設定へのアクセス
条件は、Fastly のコントロールパネルの 2 つのエリアに表示されます。
- Manage conditionsページには、設定で利用可能なすべての条件が表示されます。
- 各設定オブジェクトについて、それに付随する条件が表示されます。
Manage conditions ページの条件
Manage conditions ページでは、お客様のサービスで現在利用可能なすべての条件の概要が表示されます。どの条件が設定オブジェクトにマッピングされているかが一目で分かります。新しい条件を作成したり、既存の条件を検索することができます。
Manage conditions ページで条件を表示するには、以下の手順に従ってください。
- Fastly コントロールパネルにログインします。
- Home ページから、適切なサービスを選択します。検索ボックスを使用すると、ID、名称、ドメインでの検索が行えます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- Conditions をクリックすると、お客様のサービスで利用可能なすべての条件が表示されます。
例えばこのサービスでは、利用可能なリクエスト条件が1件あります。
上記の例では、このリクエスト条件は現在、どの設定オブジェクトにも適用されていません (「Not applied to anything」と表示されています)。適用されている場合は以下のように表示されます。
設定オブジェクトに条件が直接追加されている場合
設定オブジェクトに条件が追加されていると、コントロールパネルでの表示が異なります。例えば、このリクエスト設定には条件が追加されていません。
Attach a condition をクリックして新しい条件を作成したり、既存の条件を追加すると、コントロールパネルでの設定オブジェクトの表示が変わります。
デフォルトでは、設定オブジェクトに追加された条件に関する詳細の大部分が非表示になっています。Show details をクリックすると、これらの詳細を表示できます。展開した際に表示される詳細の内容は、条件の種類によって異なります。
正しく設定された条件の構成要素
条件には少数のパラメータのみが必要なので、非常にシンプルに見えます。具体的には以下が必要です。
- Type パラメータは、追加された条件を分類するためのものです。条件管理ページで追加した場合、タイプは常に手動で選択できます。構成オブジェクトの 条件をアタッチする リンクを介して追加された場合、そのタイプは可能な限り自動的に適用されます。
- 条件に対して人が読める識別子を提供する 名前パラメータ。
- VCL で実行する論理式を含む 適用条件のステートメントで、条件が True または False に解決するかどうかを判断します。
条件に関する問題の多くは、適用条件パラメータで発生します。
基本的な論理式に対する一致の実行
条件を適切に設定することで、適用条件パラメータで指定した複雑な論理式に対して一致させることができます。例 :
この論理的な表現 … | …の時に一致します。 |
---|---|
client.ip == "127.0.0.1" |
お客様のサービスでリソースを要求するクライアントは、IP 127.0.0.1 を持っています。 |
req.http.host == "example.com" |
受信したリクエストの Host ヘッダは example.com です。 |
req.method == "POST" && req.url ~ "^/api/articles/" |
リクエストは POST で、URL は /api/articles/ で始まっています。 |
上記の client.ip
、req.http.host
、req.method
、req.url
の条件は、いずれも VCL の設定変数を表しています。
演算子を使用した複雑な論理式で検索を実行する
また、クリエイティブな発想で、Fastly で使用されるもっと複雑な条件を作り、次のような適用条件パラメータを持たせることもできます。
1
req.http.host == "www.example.com" && (req.url !~ "/foo" && req.url !~ "/bar" && req.url !~ "^/baz")
この条件は、キャッシュサーバーに対して、ホストが www.example.com
に一致し、URL が /foo
、/bar
、/baz
に一致してはならないというものです。このタイプの条件は、複数の変数やオプションがあり、結果を微調整したい場合に使うことがあります。この例では、次の演算子を使って、foo
、bar
、baz
を含む URL が不要であることを示しています。
条件の使用この演算子... | これは... |
---|---|
( ) |
式をグループ化し、変更を正規表現の一部に限定する |
&& |
各式が真であることを確認する |
!~ |
指定された変数を含むすべての URL を除外する |
条件追加の一例
シナリオ : API リクエストの特定の部分を処理するオリジンサーバーを新たに追加したい。この API への一部のリクエストは、お客様の API への他のリクエストとは異なる方法でキャッシュされなければならないため、特定のタイプのリクエストには特別なヘッダを設定したいと考えています。具体的には、新しいオリジンサーバーが PUT、POST、DELETE リクエストをキャッシュして、各レスポンスに時間に依存したメタ情報を送り返さないようにします。そして最後に、これを行ったことによる効果を追跡したいと思います。Fastly コントロールパネルを介した条件でこれらすべてを実現するには、次のようにします。
- 特別な API トラフィックを処理するために、新しいオリジンサーバー を作成してください。
- 新しい条件を作成 して、API リクエストの一部をそのオリジンサーバーにルーティングする方法をキャッシュに伝えます。
- オリジンサーバーが正しいレスポンスのみをキャッシュするように、新しいキャッシュ設定オブジェクトを作成します。
- キャッシュ設定オブジェクトを適用するタイミングを指定する 新しい条件を作成します。
- 特定のタイプの API リクエストを追跡するために、新しいヘッダを作成します。
- 新しいレスポンス条件を作成して、特定のタイプのリクエストでのみヘッダが設定されるようにします。
- 自分の作業を確認します。
オリジンサーバーの新規作成
特別なAPIトラフィックを処理する新しいオリジンサーバーを作成するには、オリジンサーバーへの接続 の手順に従ってください。ホストの作成 フィールドに記入する際に、API サーバーに関する具体的な情報を追加します。
- Name には、API サーバーの名前を入力します (例 :
Special API Server
)。 - Addressフィールドには、API サーバーの IP アドレス (またはホスト名) を入力します。
リクエストに付与する条件を作成
特別な API トラフィックを処理するために新しいオリジンサーバーを作成した場合、リクエスト条件を作成して、リクエストをこのオリジンサーバーにどのようにルーティングするかをキャッシュに伝えます。
- Hosts エリアで、先ほど作成したオリジンサーバーの名前の横にある Attach a condition リンクをクリックします。条件を追加する ウィンドウが表示されます。
-
利用可能な条件を選択するか、Create a new request condition ボタンをクリックします。新しいリクエスト条件の作成 ウィンドウが表示されます。
- Create a new request condition フィールドを以下のように記入してください。
- Name フィールドに、新しい条件の説明的な名前を入力します (例 :
Special API Request
)。 - Apply if フィールドに、適用される適切なリクエスト条件を入力します (例えば、
req.url ~ "^/special/"
特別な API サーバーに関連するすべてのリクエストに対処することができます)。
- Name フィールドに、新しい条件の説明的な名前を入力します (例 :
- Save and apply to ボタンをクリックすると、そのホストに対する新しい条件が作成されます。
キャッシュ設定オブジェクトの作成
リクエストは、新しいオリジンサーバーに適切にルーティングされるようになりました。次に、キャッシュ設定オブジェクトを作成して、Fastly が PUT、POST、または DELETE リクエストからの応答をキャッシュしないようにします。この API は特別なもので、各レスポンスに時間に依存した追加のメタ情報を送り返します。
- Settings をクリックします。Settings ページが表示されます。
-
Cache Settings エリアで、Create cache setting ボタンをクリックします。キャッシュ設定の作成 ページが表示されます。
-
Create a cache setting の項目を以下のように入力します。
- Name フィールドに、新しいキャッシュ設定の分かりやすい名前を入力します。
- TTL (seconds) フィールドは、デフォルト値のままにしておきます。
- Action メニューから Pass (do not cache) を選択します。
- Stale TTL (seconds) フィールドはデフォルト値のままにしておきます。
- Create ボタンをクリックします。
キャッシュ設定オブジェクトの条件を作成適用する
キャッシュ設定オブジェクトを適用するタイミングを指定する新しい条件を作成します。
- Cache Settings エリアで、作成したキャッシュ設定の名前の横にある Attach a condition リンクをクリックします。条件を追加する ウィンドウが表示されます。
-
Create a new cache condition ボタンをクリックします。新しいキャッシュ条件の作成 ウィンドウが表示されます。
- 以下の要領で、 Create a new cache condition ウィンドウの各フィールドに入力します。
- Name フィールドに、新しい条件の分かりやすい名前を入力します (例 :
Special API Origin Response
)。 - Apply if フィールドに、適用される適切なリクエスト条件を入力します (例 :
req.method ~ "PUT|POST|DELETE" && beresp.status == 200
)。
- Name フィールドに、新しい条件の分かりやすい名前を入力します (例 :
- Save and apply to ボタンをクリックすると、キャッシュ設定の新しい条件が作成されます。
新規ヘッダの作成
新しい API の効果を確実に把握するために、新しいヘッダを作成し、特別な API リクエストが発生した際に、その情報を収集できるようにします。
- Content をクリックします。Content ページが表示されます。
-
Headers エリアで Create header ボタンをクリックすると、新しいヘッダが作成されます。ヘッダ作成ページが表示されます。
- 以下のように Create a header ウィンドウの各フィールドに入力します。
- Name フィールドに、新しいヘッダの分かりやすい名前を入力します (例 :
Special API Set Header
)。 - Type メニューから Response を選択し、Action メニューから Set を選択します。
- Destination フィールドに、アクションの影響を受けるヘッダの名前を入力します (例 :
http.super
)。 - Source フィールドには、このヘッダのコンテンツの元となるソースの説明を入力します (例 :
"Thanks for asking!"
)。 - Ignore if set と Priority フィールドは、デフォルトの設定のままにしておきます。
- Name フィールドに、新しいヘッダの分かりやすい名前を入力します (例 :
- Create をクリックします。
新しいヘッダと条件の作成
ヘッダが作成されたら、このヘッダが特別なタイプのリクエストでのみ設定されるように、関連する条件を作成します。
-
Headers エリアで、作成したばかりの新しいヘッダの名前の横にある Attach a condition リンクをクリックします。新規リクエスト条件の作成 ウインドウが開きます。
- 以下の要領で Create a new response condition ウィンドウの各フィールドに入力します。
- Name フィールドに、新しい条件の分かりやすい名前を入力します (例 :
Special API Response Condition
)。 - Apply if フィールドに、適用される適切なリクエスト条件を入力します (例 :
req.url ~ "^/special" && resp.status == 200
)。
- Name フィールドに、新しい条件の分かりやすい名前を入力します (例 :
- Save and apply to ボタンをクリックすると、作成した内容がヘッダの作成条件として適用されます。
作業を確認する
構成をアクティブにする前に、生成された VCL を確認 し、Fastly がオブジェクトと条件を実際の VCL に変換したことを確認してください。上の例では、要求条件の VCL は次のように表示されます。
1
2
3
4
5
# Condition: Special API Request Prio: 10
if (req.url ~ "^/special/") {
set req.backend = F_Special_API_Server;
}
#end condition
キャッシュ設定と条件の VCL が表示されます。
1
2
3
4
5
if (req.method ~ "PUT|POST|DELETE" && beresp.status == 200) {
set beresp.ttl = 0s;
set beresp.grace = 0s;
return(pass);
}
また、新しいヘッダのレスポンス条件 VCL は次のように表示されます。
1
2
3
4
5
6
# Condition Special API Response Condition Prio: 10
if (req.url ~ "^/special" && resp.status == 200) {
# Header rewrite Special API Set Header: 10
set resp.http.super = "Thanks for asking!";
}
VCL の構文やプログラミングに慣れてきたら、生成された VCL を見て、設定が思った通りにできているかどうかを確認してみましょう (ほとんどの VCL は、変数が何を参照しているかさえ分かれば、とてもシンプルです0。