🐕

Origin Rules について

2024/07/01に公開

前回はPage Rules をやりましたが、今日はOrigin Rules について触れていきます。
https://zenn.dev/kameoncloud/articles/0ea8889483d6c2
https://zenn.dev/kameoncloud/articles/fc44f431558163

今回はnginxではなくApacheを用います。(意味はないです。私の作業メモ用にApache用も残したかっただけです)

Apache の環境準備

Amazon Linux 2023 を使います。

sudo yum update -y
sudo yum install httpd -y
sudo systemctl start httpd
sudo systemctl enable httpd

一度ブラウザでアクセスするとデフォルトでIt works!が表示されます。
設定ファイルの最終行に以下を書き込み保存します。

sudo vi /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\" \"%{Referer}i\" \"%{Host}i\" \"%{Accept}i\" \"%{Accept-Language}i\" \"%{Accept-Encoding}i\" \"%{Cookie}i\" \"%{Connection}i\"" combined
CustomLog logs/access_log combined

Apacheを再起動して再度アクセスします。

sudo systemctl restart httpd
sudo more /var/log/httpd/access_log

でログを確認します。

219.104.132.56 - - [01/Jul/2024:05:10:44 +0000] "GET / HTTP/1.1" 403 45 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K
HTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "-" "18.181.224.200" "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif
,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "ja,en-US;q=0.9,en;q=0.8" "gzip, deflate" "-" "keep-alive"

Origin Rules の設定

前回の手順同様にCloudflare経由でのアクセスを設定します。

以下の様にOriginへのアクセス元がブラウザからCloudflare Edgeに代わるためIPアドレスやURLなどが変わっています。

172.68.118.200 - - [01/Jul/2024:05:12:57 +0000] "GET / HTTP/1.1" 403 45 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "-" "origin.a.harunobukameda.com" "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "ja,en-US;q=0.9,en;q=0.8" "gzip, br" "_ga=GA1.1.1415436812.1712910945; _ga_941R5R0YNM=GS1.1.1718605013.10.1.1718605162.0.0.0" "Keep-Alive"

ではOrigin RulesCreate ruleのボタンを押します。

適当な名前を付けます。

全部で4つの設定があります。

Host Header


一般的なユースケースは、コンテンツがサードパーティサーバーでホストされており、そのサードパーティサーバーがHostヘッダーに独自のサーバー名しか受け付けない場合です。例えばHost: example.comで通信を受け付けるものの、Host: thirdpartyserver.example.netへ受信リクエストを書き換えたい場合等です。
類似のケースとしてその向きには80番や443で通信を受け付けるものの、内部的には別ポートでリクエストを受け付けたい場合などに使われます。

Server Name Indication (SNI)

SNI はワイルドカードを含んだTLS用電子証明書など、単一IPアドレスで複数のドメイン名のTLSを処理する際に使われるパラメーターです。
このオプションではリクエストのSNI(Server Name Indication)値を上書きできるようにします。
新しいSNI値は、同じCloudflareアカウント上の有効なホスト名である必要があります。

DNS Record

リクエストの解決済みホスト名を上書きします。DNS レコードのオーバーライドにより、リクエストを別のサーバーにリダイレクトできます。
DNS レコードのオーバーライドでは、同じ Cloudflare アカウント上のホスト名である有効なホスト名を指定する必要があります。例えばresolve.example.comへのアクセスをdomain.s3.amazonaws.comへ飛ばす場合等です。
例えばhttps://origin.a.harunobukameda.com/へのアクセスがあった場合https://cman.b.harunobukameda.com/へ飛ばすルールを作成するとします。origin.a.harunobukameda.comに対するCNAMEとしてcman.b.harunobukameda.comを設定することで同様の実装は可能です。ただしこの場合、すべてのorigin.a.harunobukameda.comへのアクセスはcman.b.harunobukameda.comへ飛ばされます。この機能を使うことで特定ディレクトリやファイルのアクセスのみリダイレクトをさえることが出来ます。
つまりメインテナンスページ等の一時誘導等に有効です。

Destination Port

Host Headerでも同様のことが行えますが、この機能はポート番号の変更のみ行いたい場合よりシンプルに使えます。
例えばApacheの設定を以下のように書き換えます。

sudo vi /etc/httpd/conf/httpd.conf
Listen 81

Destination Portを以下のように設定すると

普通にアクセスが可能になります。
ブラウザ→443→Cloudflare Edge→81(に上書き)→Originという構成です。

Discussion