apacheで、mod_deflateでレスポンスをgzipしたけどネットワークトラフィックが増えている?
iOSのネイティブアプリでの掲示板サービスの、jsonを返すバックエンドのAPIのサーバーをつくってます。 ネットワークトラフィックを減らそうと思って、apacheでgzip圧縮をすることにしました。 コンテンツの圧縮率をみたら、処理によって、圧縮できているところと、 むしろ圧縮以前より容量が増えたものがあったりして、よくわからないので備忘録的にまとめました\(^o^)/オワタ
必要なmodule
設定
httpd.confに記述するだけ。 やった環境 centOS 6.5, Apache/2.2.15 モジュールversion
- モジュールの読み込み
LoadModule deflate_module modules/mod_deflate.so LoadModule filter_module modules/mod_filter.so
- モジュールの利用
#Gzipの圧縮の設定 # 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 # ここからフィルター設定 FilterDeclare Compression CONTENT_SET FilterProvider Compression DEFLATE Content-Type $text/plain FilterProvider Compression DEFLATE Content-Type $text/css FilterProvider Compression DEFLATE Content-Type $application/xhtml FilterProvider Compression DEFLATE Content-Type $application/xml FilterProvider Compression DEFLATE Content-Type $application/json FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml FilterProvider Compression DEFLATE Content-Type $application/rss+xml FilterProvider Compression DEFLATE Content-Type $application/atom+xml FilterProvider Compression DEFLATE Content-Type $application/x-javascript FilterProvider Compression DEFLATE Content-Type $image/svg+xml FilterProvider Compression DEFLATE Content-Type $text/html FilterProvider Compression DEFLATE Content-Type $application/javascript FilterChain Compression # ここまでフィルター設定 # Don't append Vary heder for specific files SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding env=!dont-vary # gzipでの圧縮率をログに吐き出す(確認用) DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate CustomLog logs/deflate_log deflate
ちなみに一番下にある、deflate_logを見ると、mod_deflateによる圧縮率を見ることができます。
"GET /example/badge HTTP/1.1" 45/37 (121%) "GET /example/list?offset=1&per_page=20&seed=26 HTTP/1.1" 1835/5221 (35%)
送信データの多いもの(掲示板の一覧表示画面)は、大幅に圧縮できているけど、 送信データ量の少ないもの(新着通知のバッチのカウントを返すもの)は、むしろ容量が増えている(?)
これはなんでだろう。
上記謎と、gzip圧縮によるCPU使用の増加率とかも、サービスイン後に調べてみようとおもいます! リリース前は、あれもやりたい!これもやりたい!ということがあって、
サービスインするまでには、インフラやアプリ・運用を見据えた仕組みでやっとけばいいことというのは本当に無数にあって、 リリース前までにやるべきこと以外で、捨てることは本当に多いなと痛感しながら日々進めております。