5 – ページルールで例外を追加する
HTTPS設定の構成チュートリアルでは、example.comへのすべての受信リクエストに適用されるゾーン設定を構成しました。このチュートリアルでは、ページルールを使用して、これらの設定に例外を追加します。
具体的には、レンダリングにコストがかかり、キャッシュできないURLのセキュリティレベルを引き上げます: https://www.example.com/expensive-db-call。さらに、このページをホストするために以前使用されていたURLからのリダイレクトも追加します。
新しいブランチを作成し、設定を追加します。
git checkout -b step5-pagerule新しいブランチ 'step5-pagerule' に切り替えましたcat >> cloudflare.tf <<'EOF'resource "cloudflare_page_rule" "increase-security-on-expensive-page" { zone_id = var.zone_id target = "www.${var.domain}/expensive-db-call" priority = 1
actions { security_level = "under_attack" }}
resource "cloudflare_page_rule" "redirect-to-new-db-page" { zone_id = var.zone_id target = "www.${var.domain}/old-location.php" priority = 2
actions { forwarding_url { url = "https://www.${var.domain}/expensive-db-call" status_code = 301 } }}EOFTerraformが行う変更をプレビューし、それをmasterブランチにマージします。
terraform plancloudflare_record.www-asia: 状態を更新中... [id=fda39d8c9bf909132e82a36bab992864]cloudflare_record.www: 状態を更新中... [id=c38d3103767284e7cd14d5dad3ab8669]cloudflare_zone_settings_override.example-com-settings: 状態を更新中... [id=e2e6491340be87a3726f91fc4148b126]cloudflare_load_balancer_monitor.get-root-https: 状態を更新中... [id=4238142473fcd48e89ef1964be72e3e0]cloudflare_load_balancer_pool.www-servers: 状態を更新中... [id=906d2a7521634783f4a96c062eeecc6d]cloudflare_load_balancer.www-lb: 状態を更新中... [id=cb94f53f150e5c1a65a07e43c5d4cac4]
Terraformは選択したプロバイダーを使用して、以下の実行計画を生成しました。リソースアクションは以下の記号で示されます: + create
Terraformは以下のアクションを実行します:
# cloudflare_page_rule.increase-security-on-expensive-page が作成されます + resource "cloudflare_page_rule" "increase-security-on-expensive-page" { + id = (適用後に知られる) + priority = 1 + status = "active" + target = "www.example.com/expensive-db-call" + zone_id = "e2e6491340be87a3726f91fc4148b126"
+ actions { + always_use_https = false + disable_apps = false + disable_performance = false + disable_security = false + disable_zaraz = false + security_level = "under_attack" } }
# cloudflare_page_rule.redirect-to-new-db-page が作成されます + resource "cloudflare_page_rule" "redirect-to-new-db-page" { + id = (適用後に知られる) + priority = 2 + status = "active" + target = "www.example.com/old-location.php" + zone_id = "e2e6491340be87a3726f91fc4148b126"
+ actions { + always_use_https = false + disable_apps = false + disable_performance = false + disable_security = false + disable_zaraz = false
+ forwarding_url { + status_code = 301 + url = "https://www.example.com/expensive-db-call" } } }
計画: 2を追加、0を変更、0を破棄。
------------------------------------------------------------------------
注意: -outオプションを使用してこの計画を保存しなかったため、Terraformは今すぐ「terraform apply」を実行した場合に正確にこれらのアクションを実行することを保証できません。git add cloudflare.tfgit commit -m "ステップ5 - 2つのページルールを追加。"[step5-pagerule d4fec16] ステップ5 - 2つのページルールを追加。 1ファイルが変更され、23行が追加されましたgit checkout masterブランチ 'master' に切り替えましたgit merge step5-pagerule更新中 7a2ac34..d4fec16ファストフォワード cloudflare.tf | 23 +++++++++++++++++++++++ 1ファイルが変更され、23行が追加されましたまず、(現在は存在しない)高コストのレンダリングページの古い場所にリクエストをテストします。
curl -vso /dev/null https://www.example.com/old-location.php 2>&1 | grep "< HTTP\|Location"< HTTP/1.1 404 Not Found予想通り、場所は見つかりません。エラーを修正するためのリダイレクトを含むページルールを適用します。
terraform apply --auto-approvecloudflare_record.www-asia: 状態を更新中... [id=fda39d8c9bf909132e82a36bab992864]cloudflare_load_balancer_monitor.get-root-https: 状態を更新中... [id=4238142473fcd48e89ef1964be72e3e0]cloudflare_zone_settings_override.example-com-settings: 状態を更新中... [id=e2e6491340be87a3726f91fc4148b126]cloudflare_record.www: 状態を更新中... [id=c38d3103767284e7cd14d5dad3ab8669]cloudflare_load_balancer_pool.www-servers: 状態を更新中... [id=906d2a7521634783f4a96c062eeecc6d]cloudflare_load_balancer.www-lb: 状態を更新中... [id=cb94f53f150e5c1a65a07e43c5d4cac4]
Terraformは選択したプロバイダーを使用して、以下の実行計画を生成しました。リソースアクションは以下の記号で示されます: + create
Terraformは以下のアクションを実行します:
# cloudflare_page_rule.increase-security-on-expensive-page が作成されます + resource "cloudflare_page_rule" "increase-security-on-expensive-page" { + id = (適用後に知られる) + priority = 1 + status = "active" + target = "www.example.com/expensive-db-call" + zone_id = "e2e6491340be87a3726f91fc4148b126"
+ actions { + always_use_https = false + disable_apps = false + disable_performance = false + disable_security = false + disable_zaraz = false + security_level = "under_attack" } }
# cloudflare_page_rule.redirect-to-new-db-page が作成されます + resource "cloudflare_page_rule" "redirect-to-new-db-page" { + id = (適用後に知られる) + priority = 2 + status = "active" + target = "www.example.com/old-location.php" + zone_id = "e2e6491340be87a3726f91fc4148b126"
+ actions { + always_use_https = false + disable_apps = false + disable_performance = false + disable_security = false + disable_zaraz = false
+ forwarding_url { + status_code = 301 + url = "https://www.example.com/expensive-db-call" } } }
cloudflare_page_rule.redirect-to-new-db-page: 作成中...cloudflare_page_rule.increase-security-on-expensive-page: 作成中...cloudflare_page_rule.redirect-to-new-db-page: 作成が完了しました 3秒後 [id=c5c40ff2dc12416b5fe4d0541980c591]cloudflare_page_rule.increase-security-on-expensive-page: 作成が完了しました 6秒後 [id=1c13fdb84710c4cc8b11daf7ffcca449]
適用が完了しました!リソース: 2が追加され、0が変更され、0が破棄されました。ページルールが適用されたので、再度その呼び出しを試みます。また、私は攻撃を受けているモードのテストも行います。
curl -vso /dev/null https://www.example.com/old-location.php 2>&1 | grep "< HTTP\|Location"< HTTP/1.1 301 Moved Permanently< Location: https://www.example.com/expensive-db-callcurl -vso /dev/null https://www.example.com/expensive-db-call 2>&1 | grep "< HTTP"< HTTP/1.1 503 Service Temporarily Unavailable呼び出しは期待通りに動作します。最初のケースでは、Cloudflareのグローバルネットワークがブラウザを新しい場所にリダイレクトする301を返します。2番目のケースでは、Cloudflareのグローバルネットワークが最初に503を返し、これは攻撃を受けているモードと一致します。