Apache で手動圧縮ソリューションが必要です。私の目標:
- サーバー上で gzip エンコードされたコンテンツを非圧縮と共に提供します。
- ファイルは事前に圧縮されています。
- すべてのファイルが圧縮されて提供されるわけではありません。これらのファイルを指定したいのですが、選択はタイプ (拡張子) ベースではありません。
- 多くのコンテンツ タイプ (カスタム タイプ) が提供されており、新しいタイプが時々登場しています。また、ファイル拡張子は、圧縮されるかどうかを決定しません ( !!! )。
- オーバーヘッドを最小限に抑えます (余分なヘッダーが少ないほど良い)。
- 常に Content-Length ヘッダーを提供し、チャンクされた応答を送信しない (これは不適格となり
mod_deflate
ます)。
理想的な機能
理想的な機能は次のように機能します。
- Web クライアントが file を要求します
file.ext
。 file.ext.gz
サーバーに存在する 場合:Content-Encoding
に設定されていgzip
ます。Content-Type
file.ext
( !!! )の値に設定されます。- サーバーが を返します
file.ext.gz
。
- それ以外の場合
file.ext
は返されます。
私はいくつかのソリューションをテストしました。この記事には適切な編集が含まれていますが、( !!! )でマークされた部分には常に問題がありました。ForceType
何十万ものファイルと何十ものコンテンツ タイプがあるため、ファイルごとに追加する必要のない自動ソリューションを探しています。
私が試したこと
マルチビュー
仕組み:
- ファイル名
file.ext
をfile.ext.en
- ファイルを作成する
file.ext.gz
アパッチを構成します。
オプション + マルチビュー AddEncoding x-gzip .gz 削除タイプ .gz
file.ext
元のファイル ( ) が存在しない必要があり、削除できない (削除しない) 多くの (私には役に立たない) ヘッダー ( TCN
、Content-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-Type
たfile.ext
がfile.ext.gz
、これを行う方法が見つかりませんでした。