コンテンツにスキップ

5 – ページルールで例外を追加する

HTTPS設定の構成チュートリアルでは、example.comへのすべての受信リクエストに適用されるゾーン設定を構成しました。このチュートリアルでは、ページルールを使用して、これらの設定に例外を追加します。

具体的には、レンダリングにコストがかかり、キャッシュできないURLのセキュリティレベルを引き上げます: https://www.example.com/expensive-db-call。さらに、このページをホストするために以前使用されていたURLからのリダイレクトも追加します。

1. 新しいブランチを作成し、ページルールを追加する

新しいブランチを作成し、設定を追加します。

Terminal window
git checkout -b step5-pagerule
新しいブランチ 'step5-pagerule' に切り替えました
Terminal window
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
}
}
}
EOF

2. 変更をプレビューしてマージする

Terraformが行う変更をプレビューし、それをmasterブランチにマージします。

Terminal window
terraform plan
cloudflare_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」を実行した場合に正確にこれらのアクションを実行することを保証できません。
Terminal window
git add cloudflare.tf
git commit -m "ステップ5 - 2つのページルールを追加。"
[step5-pagerule d4fec16] ステップ5 - 2つのページルールを追加。
1ファイルが変更され、23行が追加されました
Terminal window
git checkout master
ブランチ 'master' に切り替えました
Terminal window
git merge step5-pagerule
更新中 7a2ac34..d4fec16
ファストフォワード
cloudflare.tf | 23 +++++++++++++++++++++++
1ファイルが変更され、23行が追加されました

3. 変更を適用して確認する

まず、(現在は存在しない)高コストのレンダリングページの古い場所にリクエストをテストします。

Terminal window
curl -vso /dev/null https://www.example.com/old-location.php 2>&1 | grep "< HTTP\|Location"
< HTTP/1.1 404 Not Found

予想通り、場所は見つかりません。エラーを修正するためのリダイレクトを含むページルールを適用します。

Terminal window
terraform apply --auto-approve
cloudflare_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が破棄されました。

ページルールが適用されたので、再度その呼び出しを試みます。また、私は攻撃を受けているモードのテストも行います。

Terminal window
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-call
Terminal window
curl -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を返し、これは攻撃を受けているモードと一致します。