すべてのプロダクト
Search
ドキュメントセンター

:リクエストがAlibaba Cloud Content Delivery Network back-to-originを通過した後、Gzip圧縮は正常に有効になりません

最終更新日:May 22, 2024

説明

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の設定ファイルを更新して問題を修正できます。 問題の症状がわからない場合は、詳細情報をご参照ください。

  1. NginxでGzipを含む構成セグメントを見つけます。 Gzipはhttp、サーバー、および場所の構成セグメントで構成できるためです。 異なる構成セグメントに対応する構成ファイルは異なる場合があり、実際の構成の対象となります。 このトピックでは、例として、Gzipがnginx.confファイルで構成されているhttp構成セグメントを使用します。
  2. gzip構成にGzip_プロキシ構成が存在するかどうかを確認します。 存在する場合は、次の設定を変更します。 そうでない場合は、次の設定を追加します。 gzip_proxied設定の詳細については、「Nginx公式ドキュメント」をご参照ください。
    説明

    : gzip_proxied設定が存在しない場合、デフォルト値offが使用されます。

    gzip_proxied任意の
    説明

    description: anyは、プロキシサーバーからのすべてのリクエストが圧縮が有効になることを示します。

  3. 上記の設定を保存した後、次のコマンドを順番に実行してNginx設定が正しいことを確認し、Nginx設定ファイルを再読み込みします。
    nginx -t
    nginx -sリロード 
  4. Alibaba Cloud Content Delivery Networkを有効にした後、返されるレスポンスヘッダーにAlibaba Cloud Content Delivery Networkが含まれていること、つまりコンテンツが圧縮されていることを確認します。 クライアント要求は、Content-Encoding: gzipを介してオリジンNginxサーバーに転送されます。

参考資料

フィールド環境の問題状況がこの記事の問題説明と一致していることを確認するには、次のテスト手順を参照してください。

  1. curlコマンドをサポートするクライアントにログオンします。
  2. 次のコマンドを実行して、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が含まれていることを確認します。
  3. 次のコマンドを実行し、手順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