Origin Rules について
前回はPage Rules をやりましたが、今日はOrigin Rules について触れていきます。
今回は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 Rules
→Create 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