動作確認が大切なのはもちろん、証拠として提示しなくてはならない時もあります。本日は「mod_deflateの動作確認方法3つ」についてです。
こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。本日は、「mod_deflateの動作確認方法3つ」についてです。
mod_deflateとはapacheモジュールの一つで、Webページデータを圧縮して、ネットワーク転送量を減らすことにより高速表示を図るというモジュールです。
mod_deflate - Apache HTTP サーバ バージョン 2.4
ですが圧縮処理の分だけCPUの処理は増えるので導入には検討が必要です。もっとも現在はよほどの旧式サーバーでもない限りは、導入しない理由はないんですけどね。
なぜ動作確認を3つも?
特定の環境においては一般的(だと代表齊藤は思っている)な確認方法ではムリな場合があるからです。代表齊藤が直面した状況は「VPN内で稼動しているサーバー」でした。かつサーバーを直接いじるということは出来ないため、必要ならば担当者に依頼するという状況でもありました。しかしトライ&エラーが必要な作業なので何度も頼みづらいのがアレだった訳です。
以下より3つの方法を提示しますが、もちろんいずれの方法でも動作確認は取れます。しかし上記の通り少し特殊な状況だったため、結局代表齊藤が採った方法は「3」となりました。
その1:Webサービスで
これがもっとも一般的(だと代表齊藤は思っている)な確認方法です。以下サイトにアクセスして一番上の「httpzip」の項目に対象ページのURLを入力し「Compressed (gzip)」と表示されればOKです。
Port80 Software Evaluation Tools
画像はこのサイトhttps://www.neko-it.com/の結果です。mod_deflateが有効になっていることが確認できますね。インターネットに公開されているサイトなので結果が取得できますが、先の通りVPN、イントラネットでのみ公開されているサイトでは判定できないのです。さて困りましたね。
その2:apacheのログで
次は「サーバーでやってることなのでサーバーのログで確認しよう」というものです。以下をhttpd.confに追記してください。deflate.confが存在するならそちらがいいかもしれません。
1 2 3 4 5 6 |
# deflate log setting DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '(%{ratio}n%%) "%r" %{outstream}n/%{instream}n %{User-agent}i' deflate CustomLog logs/deflate_log deflate |
この確認方法は
「動いているor動いてない」
ではなく、
「何を何パーセント圧縮しているか」
をログとして書き出すものなのでご注意ください。
ただし環境により、
DeflateFilterNote not allowed here
というエラーが出る場合があります。その場合は以下の様にhttpd.confの内容を変更する必要があります。
1 2 |
AllowOverride FileInfo Options +SymLinksIfOwnerMatch |
代表齊藤がコレに気づいたのは次の「その3」施策後に研究目的で調べた後です。
その3:PHPプログラムで
「その2」では何度もサーバー担当者にトライ&エラー的依頼をすることになるので、結局自分で自由に触れる「プログラム」で動作確認を取りました。貴重な情報を提供してくれた以下サイトに感謝いたします。
phpのcurl ライブラリの使い方のHTTP実例いっぱい - それマグで!
Saba note
PHP cURL not returning Content-Encoding header - Stack Overflow
以下がソースになります。結果さえ見れればいいので適当です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$curl = curl_init(); $opts = array ( CURLOPT_URL => 'http://192.168.1.10とかそのサーバーを指定', CURLOPT_TIMEOUT => 120, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_ENCODING => 'gzip', CURLOPT_HEADER => true, ); curl_setopt_array($curl, $opts); $return = curl_exec($curl); list($rawHeader, $response) = explode("\r\n\r\n", $return, 2); $cutHeaders = explode("\r\n", $rawHeader); $headers = array(); foreach ($cutHeaders as $row) { $cutRow = explode(":", $row, 2); $headers[$cutRow[0]] = trim($cutRow[1]); } echo "<p>\n"; echo "<strong>Content-Encodingの確認</strong><br />\n"; echo "↓Content-Encoding<br />\n"; echo $headers['Content-Encoding']; // gzip echo "\n<br />"; echo "↑Content-Encoding\n"; echo "</p>\n"; |
以上mod_deflateの動作確認方法を3つ紹介しましたが、誰かのお役に立てば幸いです。