🐙

Transform Rules について

2024/06/26に公開

先日 Page Rules のアナウンスメントについてまとめました。
https://zenn.dev/kameoncloud/articles/0ea8889483d6c2
今日は Transform Rules について触っていきます。

Transform Rules とは

リクエストと応答の URI パス、クエリ文字列、HTTP ヘッダーを変換することが出来ます。4つの機能が備わっています。

  • Rewrite URL rules:
    HTTP リクエストの URL パスとクエリ文字列を書き換えます。
  • HTTP request header modification rules:
    HTTP リクエストヘッダーの値を設定するか、リクエスト ヘッダーの削除を行います。
  • HTTP response header modification rules:
    HTTP 応答ヘッダーの値を設定するか、応答ヘッダーを削除します。
  • Managed Transforms:
    HTTP リクエスト ヘッダーとレスポンス ヘッダーの一般的な調整を実行します。

さっそくやってみる

まずはOriginを立てましょう。
https://zenn.dev/kameoncloud/articles/6d2dec59232917
の内容を参考にnginxを設定しアクセスできることが確認した後DNS Proxyモードにしておきます。
テスト用にindex.htmlをコピーしてindex2.htmlにしておきます。

cd /usr/share/nginx/html
sudo cp index.html index2.html

index.htmlは予約されており正しく動作しないためです。

├── 404.html
├── 50x.html
├── icons
│   └── poweredby.png -> ../../../pixmaps/poweredby.png
├── index.html
├── index2.html
├── nginx-logo.png
└── poweredby.png -> nginx-logo.png

Rewrite URL rules


Create ruleをおして適当な名前を付けます。


このように設定を行いSaveを押します。

この状態でindex2.htmlにアクセスを行うとpoweredby.pngが表示されます。
この際ブラウザにはhttps://transform.a.harunobukameda.com/index2.htmlと引き続き表示されています。これがRedirectと異なる点です。Statusも200になっています。

次に先ほどのルールをさらにカスタマイズして以下のようにQuery Stringの書き換えを設定します。

この状態で例えばhttps://transform.a.harunobukameda.com/index2.html/page=kamedaにアクセスしてみるとログには、以下のように表示されています。

172.70.222.101 - - [25/Jun/2024:01:55:42 +0000] "GET /poweredby.png?page=1234 HTTP/1.1" 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64
; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "2a09:bac5:4455:1191::1c0:256"

Query Stringが書き換わっていることがわかります。

Modify Request Header

次にModify Request Headerです。変更可能なヘッダーの一覧はここで定義されています。
https://developers.cloudflare.com/rules/transform/request-header-modification/reference/fields-functions/
それ以外にX-で始まるカスタムヘッダを付与させることもできます。

例えば以下のように設定した場合、

ログにはこのように出力されます。

162.158.119.252 - - [26/Jun/2024:00:31:44 +0000] "GET /index.html HTTP/1.1" 200 615 "-" "unknown" "2a09:bac5:4455:dc::16:18a" 

一つ注意点ですが、ブラウザから上がってくるリクエストヘッダとnginxのログで出力されるヘッダーの値は異なり、さらにCloudflareドキュメントでの値も異っています。(なぜ?かは不明です。すいません)例えばUser-Agentの場合、

  • ブラウザ:User-Agent (これが正しい正式名称)
  • nginx: http_user_agent
  • Cloudflareドキュメント:http.user_agent

設定では、ブラウザの値を使用してください。

Modify Response Header

HTTPレスポンスヘッダを追加もしくは上書きを行います。
利用可能なヘッダの一覧はこちらです。
https://developers.cloudflare.com/rules/transform/response-header-modification/reference/fields-functions/
それ以外にX-で始まるカスタムヘッダを付与させることもできます。

このようにセットすることで任意のクッキー値やカスタムヘッダをセット可能です。

Managed Transforms

セキュリティやプライバシー対策の一環としてよく使われる機能をトグルボタンのみで利用可能となっているものです。


以下に一覧の説明があります。
https://developers.cloudflare.com/rules/transform/managed-transforms/reference/

Discussion