説明
Alibaba Cloud Content Delivery NetworkオリジンサイトがNginxサーバーであり、Gzip圧縮が有効になっている場合、Gzip圧縮機能は、クライアントがオリジンサイトを直接要求したときに機能します。 クライアントがback-to-originを要求すると、Gzip圧縮機能は無効になります。 詳細は次の通りです。
Gzip圧縮 /解凍がサポートされている場合、Nginxは圧縮されたコンテンツを返し、トラフィックのオーバーヘッドを減らし、応答を高速化します。 ただし、Alibaba Cloudコンテンツ配信ネットワークを有効にすると、リクエストはAlibaba Cloudコンテンツ配信ネットワークを介して転送され、クライアントは最終的に非圧縮コンテンツを受信します。 つまり、Alibaba Cloud Content Delivery Network back-to-originプロセスの後、オリジンサイトのGzip機能は有効になりません。 詳細は次の通りです。
- Alibaba Cloudコンテンツ配信ネットワークが有効になっていない
要求ヘッダは、
Accept − Encoding: gzip, deflate
を含み、応答ヘッダは、Content − Encoding: gzip
を正常に戻す。 すなわち、コンテンツは圧縮されている。 - Alibaba Cloudコンテンツ配信ネットワークの有効化後
リクエストヘッダーには
Accept-Encoding: gzip, deflate
が含まれますが、レスポンスヘッダーはContent-Length
を返し、Content-Encoding: gzip
には応答しません。
原因
Origin NginxサーバーのGzip関連の設定が正しくありません。 Alibaba Cloud Content Delivery Networkのback-to-originリクエストでは、Gzip圧縮機能が有効になっていません。 詳細は次のとおりです。
クライアントのリクエストがAlibaba Cloud Content Delivery Networkを介してオリジンサーバーに転送されると、リクエストがプロキシサーバー (ここではAlibaba Cloud Content Delivery Network) からのものであることを識別するために、Via
フィールドがオリジンサーバーのリクエストヘッダーに追加されます。 Nginxのngx_http_gzip_module
モジュールにはgzip_プロキシ
設定があります。 この設定は、プロキシサーバーへのリクエストに対してGzip圧縮を有効にするかどうかを制御するために特に使用されます。この設定を有効にするための前提条件の1つは、リクエストヘッダーにVia
フィールドが含まれていることです。 このことから、gzip_プロキシ
設定により、back-to-originリクエストに対してGzip圧縮が有効かどうかが決定されることがわかります。
解決策
発生した問題が問題の説明とまったく同じである場合は、次の手順を参照してNginxの設定ファイルを更新して問題を修正できます。 問題の症状がわからない場合は、詳細情報をご参照ください。
- NginxでGzipを含む構成セグメントを見つけます。 Gzipはhttp、サーバー、および場所の構成セグメントで構成できるためです。 異なる構成セグメントに対応する構成ファイルは異なる場合があり、実際の構成の対象となります。 このトピックでは、例として、Gzipが
nginx.conf
ファイルで構成されているhttp構成セグメントを使用します。 - gzip構成に
Gzip_プロキシ
構成が存在するかどうかを確認します。 存在する場合は、次の設定を変更します。 そうでない場合は、次の設定を追加します。gzip_proxied
設定の詳細については、「Nginx公式ドキュメント」をご参照ください。説明注:
gzip_proxied
設定が存在しない場合、デフォルト値off
が使用されます。gzip_proxied任意の
説明description:
any
は、プロキシサーバーからのすべてのリクエストが圧縮が有効になることを示します。 - 上記の設定を保存した後、次のコマンドを順番に実行してNginx設定が正しいことを確認し、Nginx設定ファイルを再読み込みします。
nginx -t nginx -sリロード
- Alibaba Cloud Content Delivery Networkを有効にした後、返されるレスポンスヘッダーにAlibaba Cloud Content Delivery Networkが含まれていること、つまりコンテンツが圧縮されていることを確認します。 クライアント要求は、
Content-Encoding: gzip
を介してオリジンNginxサーバーに転送されます。
参考資料
フィールド環境の問題状況がこの記事の問題説明と一致していることを確認するには、次のテスト手順を参照してください。
curl
コマンドをサポートするクライアントにログオンします。- 次のコマンドを実行して、curlコマンドを使用してオリジンサイトに直接アクセスします。
Accept-Encoding: gzip, deflate
を含むリクエストヘッダーを追加します。curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip、deflate'
システムは同様の結果を返し、レスポンスヘッダーに説明注:
- [$ドメイン]: ドメイン名。
- [$Resource]: Webサイト上のリソースのリクエストURL (画像やapiなど) 。
- [$Original_Server_IP]: オリジンのNginxサーバーのパブリックIPアドレス。
Content-Encoding: gzip
が含まれていることを確認します。 - 次のコマンドを実行し、手順2のコマンドに基づいて
Via
フィールドを追加して、プロキシサーバーからのリクエストをシミュレートします。curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip、deflate' -H 'Via:xxx'
システムは次の応答を返し、説明注:
Via
フィールドには任意の値を使用できます。 これはテスト結果には影響しません。 このトピックでは、例としてxxx
を使用します。Content-Length
が応答ヘッダーで返され、Content-Encoding: gzip
が応答で返されないことを確認します。
関連トピック
適用可能性
- CDN