2010年 5月 24日 はてなブックマーク -
タグ: #Apache

静的コンテンツをブラウザキャッシュで高速化するための apache の設定

というわけで、apache - httpd.conf の設定はこんな感じにしています。コンテンツ圧縮も使って更にネットワーク負荷を軽減しています。

apache 2 系の httpd.conf

## mod_headers
FileETag none
Header onsuccess append Cache-Control private, max-age=86400

## mod_expires
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 days"
ExpiresByType image/png "access plus 1 days"
ExpiresByType image/gif "access plus 1 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType text/javascript "access plus 1 days"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType application/javascript "access plus 1 days"

## mod_deflate
DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml

apache 1.3 系の httpd.conf

## mod_headers
Header append Cache-Control "private, max-age=86400"

## mod_expires
ExpiresActive On
ExpiresByType image/jpeg A86400
ExpiresByType image/png A86400
ExpiresByType image/gif A86400
ExpiresByType text/css A86400
ExpiresByType text/javascript A86400
ExpiresByType application/x-javascript A86400
ExpiresByType application/javascript A86400

## mod_gzip
LogFormat "%h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_compression_ratio}npct." common_with_mod_gzip_info
LogFormat "%h %l %u %t \"%r\" %>s %b mod_gzip: %{mod_gzip_result}n In:%{mod_gzip_input_size}n Out:%{mod_gzip_output_size}n:%{mod_gzip_compression_ratio}npct." common_with_mod_gzip_info2
CustomLog /usr/local/lib/apache/logs/gzip_log common_with_mod_gzip_info2
mod_gzip_send_vary No
mod_gzip_on Yes
mod_gzip_static_suffix .gz
AddEncoding gzip .gz
mod_gzip_update_static No
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 1000
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_keep_workfiles No
mod_gzip_temp_dir /tmp
mod_gzip_handle_methods GET POST
mod_gzip_item_include mime ^application/x-httpd-cgi
mod_gzip_item_include mime ^application/x-httpd-php
mod_gzip_item_include handler ^perl-script$
mod_gzip_item_include handler ^server-status$
mod_gzip_item_include handler ^server-info$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^httpd/unix-directory$
mod_gzip_item_include file \.shtml$
mod_gzip_item_include file \.htm$
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.txt$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.pl$
mod_gzip_item_include file \.cgi$
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude file \.css$
mod_gzip_item_exclude file \.js$
mod_gzip_min_http 1001


最後ですが、上記のような設定を行った場合のリスクについて理解しておく必要があります。

上記設定を適用すると、一度表示した画像など静的コンテンツは、丸一日の間ブラウザキャッシュのみが利用されます。何らかの理由でコンテンツを更新した場合でも、条件付き GET リクエストすら発生しないため、最新のファイルが反映されないこととなります。

したがって、コンテンツ更新の頻度が高いファイルに対しては、上記設定を行うことにより不具合が発生します。逆にほぼ静的のままの画像等のコンテンツは上記設定が、高速化にかなり効いてきます。
僕的な使い方は、サイトのリニューアル前には、数日にわたり設定を一時的に OFF にして、リニューアルして落ち着いた時点で、再度 ON にする運用をしていました。
その他にファイル名にバージョンを加えることで名前をユニークにするテクニックもあります。

ブラウザキャッシュによる HTTP 高速化チューニング :: Drk7jp

静的コンテンツ配信時のApacheチューニングの小話です。

なお、全てを設定すれば良いというわけではない所は要注意です。


2年前 | | 2010年 5月 24日 | このエントリーを含むはてなブックマーク