ご利用の CDN ドメインでホットリンク保護を有効にすると、Referer ヘッダーの検証に合格しないリクエストは、状態コード 403 で拒否されます。このトピックでは、ホットリンク保護の設定ミスによって発生する 403 エラーを診断し、解決する方法について説明します。
現象
CDN で高速化されたドメインに対してホットリンク保護を設定した後、そのドメイン経由でリソースにアクセスすると 403 エラーが返されます。レスポンスヘッダーの X-Tengine-Error には、値として denied by Referer ACL が含まれます。
原因
ホットリンク保護は、受信リクエストの Referer ヘッダーを、ご利用の CDN ドメインに設定されたホワイトリストまたはブラックリストと照合することで機能します。Referer ヘッダーが設定されたルールと一致しない場合に 403 エラーが発生します。これは通常、次のいずれかのシナリオで発生します。
Referer の不一致:リクエストに
Refererヘッダーが含まれていますが、参照元ドメインがホットリンク保護のホワイトリストに含まれていません。空の Referer のブロック:リクエストに
Refererヘッダーが含まれておらず (例えば、ブラウザのアドレスバーから直接 URL にアクセスした場合など)、ホットリンク保護の設定で空の Referer 値が許可されていません。
ソリューション
まず、403 エラーの原因が Referer の不一致によるものか、空の Referer がブロックされていることによるものかを特定します。その後、対応する修正を適用します。
ステップ 1:原因の特定
Referer ヘッダーを使用したテスト:次の curl コマンドを実行します。
demo.aliyundoc.comを実際の参照元ドメインに、example.aliyundoc.comをご利用の CDN で高速化されたドメインに置き換えてください。curl -voa -e "http://demo.aliyundoc.com" http://example.aliyundoc.comレスポンスで 403 エラーが返され、
X-Tengine-Errorヘッダーにdenied by Referer ACLと表示される場合、その Referer ドメインはホットリンク保護のホワイトリストに含まれていません。Referer の不一致を修正するセクションの修正方法をご参照ください。
Referer ヘッダーなしでのテスト:
-eフラグを付けずに次の curl コマンドを実行します。curl -voa http://example.aliyundoc.comレスポンスで 403 エラーが返され、
X-Tengine-Errorヘッダーにdenied by Referer ACLと表示される場合、ホットリンク保護の設定では空の Referer を持つリクエストが許可されていません。空の Referer のブロックを修正するセクションの修正方法をご参照ください。
ブラウザでのテスト:ブラウザのアドレスバーで CDN で高速化された URL を直接開き、ブラウザの DevTools (F12) を開きます。[ネットワーク] タブを確認します。リクエストに
Refererヘッダーが含まれず、レスポンスが 403 の場合、ホットリンク保護の設定では空の Referer 値が許可されていません。
ステップ 2a:Referer の不一致を修正する
Referer ドメインがホワイトリストと一致しないために 403 エラーが発生する場合は、参照元ドメインをホットリンク保護のホワイトリストに追加します。
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションウィンドウで、[ドメイン] を選択します。
対象のドメインを見つけて、[管理] をクリックします。
[アクセス制御] > Referer ブラックリスト / ホワイトリスト > 変更 を選択します。
[ホワイトリスト] が選択されていることを確認します。参照元ドメイン (例:
demo.aliyundoc.com) をホワイトリストに追加し、[OK] をクリックします。
ステップ 2b:空の Referer のブロックを修正する
Referer ヘッダーのないリクエストがブロックされるために 403 エラーが発生する場合は、空の Referer でのアクセスを許可します。
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションウィンドウで、[ドメイン] を選択します。
対象のドメインを見つけて、[管理] をクリックします。
選択します[アクセス制御] > Referer ブラックリスト / ホワイトリスト > 変更。
ユーザーがブラウザのアドレスバーからリソース URL に直接アクセスできるようにします。 を選択し、[OK] をクリックします。
注意:空の Referer でのアクセスを許可すると、ブラウザでリソース URL を直接入力したすべてのユーザーがリソースにアクセスできるようになります。これにより、ホットリンク保護の有効性が低下する可能性があります。このオプションは、必要な場合にのみ有効にしてください。