条件の使用
最終更新日 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 で使用されるもっと複雑な条件を作り、次のような適用条件パラメータを持たせることもできます。
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トラフィックを処理する新しいオリジンサーバーを作成するには、オリジンサーバーへの接続の手順に従ってください。Create a host フィールドに記入する際に、API サーバーに関する具体的な次の情報を追加します。
- Name フィールドに非セキュアサーバーの名前を入力します (例:
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 フィールドに、適用される適切なリクエスト条件を入力します (例えば、特別な API サーバーに関連するすべてのリクエストに対処する
req.url ~ "^/special/"
ことができます)。
- Name フィールドに、新しい条件を説明する名前を入力します (例:
Save and apply to をクリックします。ホストの新しい条件が作成されます。
キャッシュ設定オブジェクトの作成
リクエストは、新しいオリジンサーバーに適切にルーティングされるようになりました。次に、キャッシュ設定オブジェクトを作成して、Fastly が PUT、POST、または DELETE リクエストからの応答をキャッシュしないようにします。この API は特別なもので、各レスポンスに時間に依存した追加のメタ情報を送り返します。
- Settings をクリックします。
Cache Settings エリアで、Create cache setting をクリックします。
Create 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 をクリックします。
Headers エリアで Create header をクリックすると、新しいヘッダが作成されます。
以下の要領では、Create a header ページの各フィールドに入力します。
- Name フィールドに、新しいヘッダーを説明する名前を入力します (例:
Special API Set Header
)。 - タイプ メニューから レスポンス を選択し、アクション メニューから セット を選択します。
- 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# Condition: Special API Request Prio: 102if (req.url ~ "^/special/") {3 set req.backend = F_Special_API_Server;4}5#end condition
キャッシュ設定と条件の VCL が表示されます。
1if (req.method ~ "PUT|POST|DELETE" && beresp.status == 200) {2 set beresp.ttl = 0s;3 set beresp.grace = 0s;4 return(pass);5}
また、新しいヘッダのレスポンス条件 VCL は次のように表示されます。
1# Condition Special API Response Condition Prio: 102if (req.url ~ "^/special" && resp.status == 200) {3 # Header rewrite Special API Set Header: 104 set resp.http.super = "Thanks for asking!";5}
VCL の構文やプログラミングに慣れてきたら、生成された VCL を見て、設定が思った通りにできているかどうかを確認してみましょう (ほとんどの VCL は、変数が何を参照しているかさえ分かれば、とてもシンプルです0。
翻訳についての注意事項
このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシーと利用規約が適用されます。