2

Apache で手動圧縮ソリューションが必要です。私の目標:

  • サーバー上で gzip エンコードされたコンテンツを非圧縮と共に提供します。
  • ファイルは事前に圧縮されています。
  • すべてのファイルが圧縮されて提供されるわけではありません。これらのファイルを指定したいのですが、選択はタイプ (拡張子) ベースではありません。
  • 多くのコンテンツ タイプ (カスタム タイプ) が提供されており、新しいタイプが時々登場しています。また、ファイル拡張子は、圧縮されるかどうかを決定しません ( !!! )。
  • オーバーヘッドを最小限に抑えます (余分なヘッダーが少ないほど良い)。
  • 常に Content-Length ヘッダーを提供し、チャンクされた応答を送信しない (これは不適格となりmod_deflateます)。

理想的な機能

理想的な機能は次のように機能します。

  • Web クライアントが file を要求しますfile.ext
  • file.ext.gzサーバーに存在する 場合:
    • Content-Encodingに設定されていgzipます。
    • Content-Typefile.ext( !!! )の値に設定されます。
    • サーバーが を返しますfile.ext.gz
  • それ以外の場合file.extは返されます。

私はいくつかのソリューションをテストしました。この記事には適切な編集が含まれていますが、( !!! )でマークされた部分には常に問題がありました。ForceType何十万ものファイルと何十ものコンテンツ タイプがあるため、ファイルごとに追加する必要のない自動ソリューションを探しています。


私が試したこと

マルチビュー

仕組み:

  • ファイル名file.extfile.ext.en
  • ファイルを作成するfile.ext.gz
  • アパッチを構成します。

    オプション + マルチビュー
    AddEncoding x-gzip .gz
    削除タイプ .gz
    

file.ext元のファイル ( ) が存在しない必要があり、削除できない (削除しない) 多くの (私には役に立たない) ヘッダー ( TCNContent-Languageおよびその他のいくつか) を追加することを除いて、ほぼ期待どおりにHeader unset動作します。

リライト

仕組み: -file.ext.gzファイルを作成します。- Apache を構成します。

<pre>
RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)$ $1.gz [L]
AddEncoding x-gzip .gz

<Files file.ext>
    ForceType my-custom/mime-type
</FilesMatch>
</pre>

これはうまく機能しますが、ForceType圧縮ファイルごとに が必要です。前に述べたように、特定の種類のすべてのファイルが圧縮されるわけではないため、拡張子に頼ることはできません。

mod_deflate

私はあまり調査しませんでした。問題は、ファイルが大きすぎる場合、ファイルが分割されてチャンクで送信され、Content-Length提供されないことです。圧縮バッファーのサイズを大きくしても、この問題を解消することはできません。


私が望むように Apache を設定することはできますか?

を動的に取得して に設定しようとしましContent-Typefile.extfile.ext.gz、これを行う方法が見つかりませんでした。

4

0 に答える 0