ESA を使用して OSS の静的リソースを高速化する場合、プライベート ESA バケットで OSS 静的 Web サイトホスティングを有効にすることもできます。このトピックでは、このシナリオで発生する可能性のあるアクセスエラーを解決する方法について説明します。
背景情報
問題の説明
このエラーは、OSS バケットの権限がプライベートに設定され、静的 Web サイトホスティング機能が有効になっており、かつ ESA でプライベート OSS バケットのオリジンフェッチ機能が有効になっている場合に発生します。
ユーザーが https://example.com/ にアクセスし、ホームページの https://example.com/index.html にアクセスしようとします。しかし、ESA ノードは 403 Forbidden エラーを返し、メッセージは You don't have permission to access the URL on this server. となります。ブラウザのデバッグ情報には、応答メッセージとして x-tengine-error: You are forbidden to list buckets が表示されます。
原因
ESA のプライベート OSS バケットオリジンフェッチ機能が、OSS 静的 Web サイトホスティング機能のデフォルトインデックスページ設定と競合します。
OSS バケットを静的 Web サイトホスティング用に設定する場合、デフォルトのインデックスページを index.html などの特定のファイルに設定する必要があります。Web サイトのドメイン名 (例: https://example.com/) に匿名でアクセスすると、リクエストは自動的にデフォルトのインデックスページ (例: https://example.com/index.html) に解決されます。しかし、プライベート OSS バケットに対して ESA のオリジンフェッチ機能を有効にすると、ESA の高速化ドメイン名にアクセスすることによって生成された OSS へのオリジンフェッチリクエストは、ルートディレクトリへの非匿名リクエストとして扱われます。デフォルトでは、ESA はこのリクエストを拒否するため、アクセスが拒否され、「You are forbidden to list buckets」エラーが返されます。
解決策
解決策 1: 静的 Web サイトホスティング機能が不要な場合は、OSS でその設定を削除します。詳細については、「静的 Web サイトホスティングの概要」をご参照ください。
解決策 2: OSS の静的 Web サイトホスティング機能を引き続き使用するには、ESA で URL 書き換えルールを設定する必要があります。このルールは、ESA がルートディレクトリにオリジンフェッチリクエストを送信するのを防ぎます。