広告・Googleアドセンス728px

Article(記事)

Apacheのチューニング(転送データ量削減編)

投稿日:2014年2月17日 更新日:

ご注意ください
この記事は2年以上前に書かれたものですので、内容が古い可能性があります。

転送データ量の削減方法にはコンテンツの容量を減らすのももちろんあるのですが、apacheでできることもあります。
今回はそんな話です。

通信系路上のパケットを圧縮して転送量を削減

mod_deflateを利用して/etc/httpd/conf/httpd.confに以下のような記述をし、圧縮を有効にします。
CentOSのapacheであれば特別なインストールは不要なはず。

~
LoadModule deflate_module modules/mod_deflate.so # <-- 記載があることの確認
~
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# example of how to compress ONLY html, plain text, xml, javascript and css
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/js text/javascript text/css
# Don't compress binaries
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|tar|bz2|sit|rar) no-gzip dont-vary
# Don't compress images
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|jpg|ico|png|tif|tiff) no-gzip dont-vary
# Don't compress movie and audio files
SetEnvIfNoCase Request_URI .(?:divx|iso|avi|wmv|mov|3gp|wav|mp3) no-gzip dont-vary
# Don't compress PDFs
SetEnvIfNoCase Request_URI .pdf no-gzip dont-vary
# Don't compress flash files (only relevant if you host your own videos)
SetEnvIfNoCase Request_URI .(?:flv|swf) no-gzip dont-vary
# Netscape 4.X has some problems
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# Compression level 1-9 ( 9 is highest compression level )
DeflateCompressionLevel 7
# Setup custom deflate log
DeflateFilterNote Input instr
DeflateFilterNote Output outstr
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstr}n/%{instr}n (%{ratio}n%%) %{User-agent}i' deflate
</IfModule>
~
<VirtualHost 192.168.00.200>
ServerAdmin webmaster@kamata-net.com
DocumentRoot /home/httpd/html/wordpress/
ServerName blog.kamata-net.com
ErrorLog logs/kamata-net.com-error_log
TransferLog logs/kamata-net.com-access_log
CustomLog logs/kamata-net.com-access_log combined
CustomLog logs/deflate_log deflate #<-- 追加
</VirtualHost>

/var/log/httpd/deflate_logには以下のようなログが出力されます。

# cat /var/log/httpd/deflate_log
"GET /archives/1814.html HTTP/1.1" 13753/64884 (21%) SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
"GET /wp-content/archives/IMGP1005.jpg HTTP/1.1" -/- (-%) Mozilla/5.0 (Linux; U; Android 4.2.2; ja-jp; SOL23 Build/14.1.C.1.227) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 GSA/3.2.17.1009776.arm
"GET /archives/2014/01/WS000183.jpg HTTP/1.1" 5060/19206 (26%) facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
"GET /archives/2014/01/WS000183.jpg HTTP/1.1" 5060/19206 (26%) facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
"GET /wp-content/archives/2011/06/9882CAEB-6C82-4A2D-A54C-BC927AC2977718.jpg HTTP/1.1" -/- (-%) Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53
"GET /archives/004078.html HTTP/1.1" -/- (-%) Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
"GET /feed/atom HTTP/1.1" -/- (-%) Feedbin - 1 subscribers
"GET /page/93?paged=122 HTTP/1.1" 5047/19182 (26%) DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
#

削減量が分かって良いですね。しかしfacebookからのアクセスの再にjpgが圧縮かかってしまうのはなぜなんだろう…。

クライアントにキャッシュさせてリクエストを削減

画像やcss、jsファイルなどは何度アクセスしてもそうそう変わるものではありませんのでクライアント側にキャッシュさせてそもそものリクエストを減らしてしまいましょう。

.htaccessに記述をしてもいいのですが、/etc/httpd/conf/httpd.confに記述をしてしまいます。
ただし、wordpressのディレクトリ配下しかキャッシュを効かせたくないので以下のように記述します。

~
LoadModule expires_module modules/mod_expires.so # <-- 記載があることの確認
~
<IfModule mod_expires.c>
<Directory "/home/httpd/html/wordpress">
ExpiresActive on
ExpiresByType image/png "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType text/css "access plus 1 months"
ExpiresByType text/javascript "access plus 1 months"
ExpiresByType application/x-javascript "access plus 1 months"
ExpiresByType application/x-shockwave-flash "access plus 1 months"
#ExpiresDefault "access plus 1 days" <-- 上記以外はキャッシュ化させたくない(リクエストさせる)のでコメントアウト
</Directory>
</IfModule>

ExpiresByType image/png "access plus 1 months"であれば、PNG画像ファイルに対して前回アクセスしてから1ヶ月はキャッシュを保存させる指示を出します。
ExpiresDefaultを指定してしまうと、動的コンテンツについてもキャッシュさせることになってしまう為ここでは画像ファイルとJSやCSSのみのしています。

CentOSのapacheであれば上記モジュールは既に組み込まれているのでリコンパイルなどの作業が必要ありません。
割とお手軽に転送量が削減できるので試してみてください。

この記事は役に立ちましたか?評価をお願いいたします。
[合計: 0 平均: 0]

広告336px

広告336px

-Article(記事)
-Apache, CentOS, Linux, WordPress

Copyright© 蒲田ネット , 2017 AllRights Reserved.