Apache のレスポンスに gzip圧縮を使う
HTTPレスポンスを圧縮して、ネットワーク負荷を軽減させる方法は、ネットを探せばたくさん出て来ます。
が、1点だけはまった部分があったので自己流にまとめたので、メモとして配置します。
設定方法
1.Apache Software Foundation\Apache2.2\conf\extra フォルダの中に、下記設定を適当な名前で配置する。
例:httpd-hogehoge.conf
2.Apache Software Foundation\Apache2.2\conf\httpd.conf の最後の方に読み込みを追加する。
例:Include conf/extra/httpd-hogehoge.conf
********************** ここから **********************
で、何が不親切かっていうと、殆どのサイトは「Header append Vary XXXXX-Encoding env=!dont-vary」の記述があります。
Apache の設定ページにも乗ってます。
でも!こいつが記述されている為に、サーバーが起動しなくなります。
という訳で、「LoadModule headers_module modules/mod_headers.so」もロードしろよっ!
って訳ですね。
なので不親切だなぁと…思っております。
また、最近はjavascriptやjsonも増えているので追加してあります。
因みにどうでも良い事ですが…
私は「設定が読めない時点でサーバーは起動すべきじゃない」と言う概念で記述します。
そのため
本番だろうがテストだろうが開発…はどうでも良いか(笑)
必要な設定が出来てないのに、取り敢えず起動されたら困ると考えています。
バージョンを変えるなら帰る前に環境を作ってテストすべきだし、動かなかったら「configtest」で問題を解決すべきですよね。
汎用的な設定ファイルを複数のサーバーに使うのも必要な事ではありますが、そんな大規模なプロジェクト入った事無いし(笑)
(もちろん応急処置で使う事はあると思いますが…)
という訳で、私は
検索用:Content-Encoding gzip apache 圧縮 レスポンス mod_deflate mod_filter VirtualHost バーチャルホスト
が、1点だけはまった部分があったので自己流にまとめたので、メモとして配置します。
設定方法
1.Apache Software Foundation\Apache2.2\conf\extra フォルダの中に、下記設定を適当な名前で配置する。
例:httpd-hogehoge.conf
2.Apache Software Foundation\Apache2.2\conf\httpd.conf の最後の方に読み込みを追加する。
例:Include conf/extra/httpd-hogehoge.conf
********************** ここから **********************
# プロキシモジュールをロード
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# フィルタモジュールをロード
LoadModule filter_module modules/mod_filter.so
# フィルタ用ヘッダーモジュールをロード
LoadModule headers_module modules/mod_headers.so
# 圧縮モジュールをロード
LoadModule deflate_module modules/mod_deflate.so
# 圧縮レベル(デフォルトは6らしい(zlibのデフォルト))
DeflateCompressionLevel 3
<VirtualHost *:80>
<Location />
# Tomcat との連携
ProxyPass ajp://localhost:8009/
Order deny,allow
Deny from all
Allow from localhost 127.0.0.1
# IE7/8対応
BrowserMatch \bMSIE\s(7|8) !no-gzip !gzip-only-text/html
# ここからフィルター設定(必要なContent-Type があればここを増やす)
FilterDeclare Compression CONTENT_SET
FilterProvider Compression DEFLATE resp=Content-Type $text/html
FilterProvider Compression DEFLATE resp=Content-Type $text/plain
FilterProvider Compression DEFLATE resp=Content-Type $text/css
FilterProvider Compression DEFLATE resp=Content-Type $text/javascript
FilterProvider Compression DEFLATE resp=Content-Type $text/xml
FilterProvider Compression DEFLATE resp=Content-Type $application/javascript
FilterProvider Compression DEFLATE resp=Content-Type $application/json
FilterProvider Compression DEFLATE resp=Content-Type $application/xhtml
FilterProvider Compression DEFLATE resp=Content-Type $application/xml
FilterProvider Compression DEFLATE resp=Content-Type $application/xhtml+xml
FilterProvider Compression DEFLATE resp=Content-Type $application/rss+xml
FilterProvider Compression DEFLATE resp=Content-Type $application/atom+xml
FilterProvider Compression DEFLATE resp=Content-Type $application/x-javascript
FilterProvider Compression DEFLATE resp=Content-Type $image/svg+xml
FilterChain Compression
# ここまでフィルター設定
# 指定の拡張子は圧縮しない。
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary
# プロキシサーバー毎のにキャッシュするように設定
# User-Agent こちらを使うと、ユーザ+ブラウザ毎になるのでデータが膨大になるから使わない。
Header append Vary Accept-Encoding env=!dont-vary
</Location>
</VirtualHost>
********************** ここまで **********************で、何が不親切かっていうと、殆どのサイトは「Header append Vary XXXXX-Encoding env=!dont-vary」の記述があります。
Apache の設定ページにも乗ってます。
でも!こいつが記述されている為に、サーバーが起動しなくなります。
という訳で、「LoadModule headers_module modules/mod_headers.so」もロードしろよっ!
って訳ですね。
なので不親切だなぁと…思っております。
また、最近はjavascriptやjsonも増えているので追加してあります。
因みにどうでも良い事ですが…
私は「設定が読めない時点でサーバーは起動すべきじゃない」と言う概念で記述します。
そのため
<IfModule XXXXXX></IfModule>タグは使用していません。
本番だろうがテストだろうが開発…はどうでも良いか(笑)
必要な設定が出来てないのに、取り敢えず起動されたら困ると考えています。
バージョンを変えるなら帰る前に環境を作ってテストすべきだし、動かなかったら「configtest」で問題を解決すべきですよね。
汎用的な設定ファイルを複数のサーバーに使うのも必要な事ではありますが、そんな大規模なプロジェクト入った事無いし(笑)
(もちろん応急処置で使う事はあると思いますが…)
という訳で、私は
<IfModule XXXXXX></IfModule>タグを使用していません。
検索用:Content-Encoding gzip apache 圧縮 レスポンス mod_deflate mod_filter VirtualHost バーチャルホスト
コメント
コメントを投稿