tag:crieit.net,2005:https://crieit.net/tags/deflate/feed 「deflate」の記事 - Crieit Crieitでタグ「deflate」に投稿された最近の記事 2021-01-09T00:05:45+09:00 https://crieit.net/tags/deflate/feed tag:crieit.net,2005:PublicArticle/16569 2021-01-09T00:05:45+09:00 2021-01-09T00:05:45+09:00 https://crieit.net/posts/set-up-apache-to-gzip-20210109 Apache で gzip のファイル圧縮転送 を設定する <p>Apache で gzip のファイル圧縮転送 を設定するメモです。</p> <h2 id="設定前の動作確認"><a href="#%E8%A8%AD%E5%AE%9A%E5%89%8D%E3%81%AE%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D">設定前の動作確認</a></h2> <p>試しに Apache 2.4系 のサーバに設定してみます。</p> <p>ちなみに設定前のとある WordPress のサイトのトップページを表示するとこのような感じ。</p> <p><a href="https://crieit.now.sh/upload_images/bc4147749145500703a1418c253625835ff8744931c15.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/bc4147749145500703a1418c253625835ff8744931c15.jpg?mw=700" alt="Chrome の Devtools で network を見る。 transferred が 1.4MB あることが分かる。" /></a></p> <p>Chrome の Devtools で network タブを開いてページをリロードすると、画像のような状態に。 <code>transferred</code> が <code>1.4MB</code> と表示されています。</p> <p><a href="https://crieit.now.sh/upload_images/108a8e79a118a713239369889835f60e5ff8746184131.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/108a8e79a118a713239369889835f60e5ff8746184131.jpg?mw=700" alt="トップページのHTMLリソースのレスポンスヘッダ" /></a></p> <p>トップページのHTMLリソースのレスポンスヘッダはこのような感じ。 <code>Connection</code> と <code>Content-Type</code> が隣接しています。</p> <h2 id="設定変更"><a href="#%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4">設定変更</a></h2> <p>設定する前にいくつか確認を。</p> <pre><code class="bash"># cd /etc/httpd/ # cd ./modules/ # ls libphp7-zts.so mod_deflate.so mod_proxy_express.so libphp7.so mod_dialup.so mod_proxy_fcgi.so ## 略 ## 略 ## 略 </code></pre> <p>まずは gzip圧縮に必要なモジュール <code>mod_deflate.so</code> があることを確認。</p> <pre><code class="bash"># cd ../ # less ./conf/httpd.conf ## 略 Include conf.modules.d/*.conf ## 略 IncludeOptional conf.d/*.conf </code></pre> <p>次に <code>httpd.conf</code> で <code>conf.modules.d/</code>ディレクトリ下 の <code>.conf</code>ファイル と <code>conf.d/</code>ディレクトリ下 の <code>.conf</code>ファイル を読み込む設定になっていることを確認。</p> <pre><code class="bash"># cd ../conf.modules.d/ # less 00-base.conf ## 略 LoadModule deflate_module modules/mod_deflate.so </code></pre> <p>続いて <code>conf.modules.d/00-base.conf</code> で <code>mod_deflate.so</code> がロードされるようになっていることを確認。</p> <pre><code class="bash"># cd ../conf.d/ # vi deflate.conf # This file is config of deflate_module. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/ld+json AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php </IfModule> </code></pre> <p>ここまでを確認したら、 <code>conf.d/deflate.conf</code> ファイルを作成して設定を記述します。</p> <p>テキストファイルで、通信することがありえそうなものを入れてみました。</p> <pre><code class="bash"># ls -al ## 略 -rw-r--r-- 1 ADMIN_USER ADMIN_USER 857 mm dd hh:ii deflate.conf ## 略 -rw-r--r-- 1 ADMIN_USER ADMIN_USER 1254 MM dd yyyy php.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 9465 MM dd yyyy ssl.conf ## 略 </code></pre> <p>念のため権限を確認。元々存在する <code>php.conf</code> 等と比較しておきます。</p> <pre><code class="bash"># systemctl reload httpd # </code></pre> <p>Apache をリロード。</p> <p>これで設定完了です。</p> <h2 id="設定後の動作確認"><a href="#%E8%A8%AD%E5%AE%9A%E5%BE%8C%E3%81%AE%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D">設定後の動作確認</a></h2> <p>さて、先程のサイトをもう一度見てみます。</p> <p><a href="https://crieit.now.sh/upload_images/a2406453c3877362774d643555bd4b8c5ff8747d72444.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a2406453c3877362774d643555bd4b8c5ff8747d72444.jpg?mw=700" alt="設定後の Devtools。 transferred が 934kB に変化した。" /></a></p> <p>今度は <code>transferred</code> が <code>934kB</code> と表示されました。 約400kB くらい圧縮されました。</p> <p><a href="https://crieit.now.sh/upload_images/91fd8b02ed2488dedffa429e2b4bcc755ff87487bbf2c.jpg" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/91fd8b02ed2488dedffa429e2b4bcc755ff87487bbf2c.jpg?mw=700" alt="設定後のトップページのHTMLリソースのレスポンスヘッダ" /></a></p> <p>設定後のトップページのHTMLリソースのレスポンスヘッダ。 <code>Connection</code> と <code>Content-Type</code> の間に <code>Content-Encoding: gzip</code> が追加されたことが確認できました。</p> <hr /> <p>表示速度は気持ち速くなったかな、くらいですが、転送容量を見ると gzip圧縮 は効いていることが確認できました。</p> <p>ちなみに、 gzip圧縮 の設定をすると転送量は小さくなりますがその分サーバ側で処理をするため、容量の大きなファイルや元々圧縮されているファイルを圧縮すると余計な負荷がかかって逆効果なことも考えられます。</p> <p>そのため、MIMEタイプの設定で画像ファイル等は除外しています。</p> <h2 id="余談"><a href="#%E4%BD%99%E8%AB%87">余談</a></h2> <h3 id="余談1"><a href="#%E4%BD%99%E8%AB%871">余談1</a></h3> <p>今回の gzip圧縮 の設定ファイルの置き場所について <code>conf.d/</code> か <code>conf.modules.d/</code> か迷ったのですが、 <code>conf.modules.d/README</code> を読むと</p> <pre><code class="bash"># less conf.modules.d/README This directory holds configuration files for the Apache HTTP Server; any files in this directory which have the ".conf" extension will be processed as httpd configuration files. This directory contains configuration fragments necessary only to load modules. Administrators should use the directory "/etc/httpd/conf.d" to modify the configuration of httpd, or any modules. Files are processed in sorted order and should have a two digit numeric prefix. See httpd.conf(5) for more information. </code></pre> <p>ということで、 <code>conf.d/</code> にしました。</p> <h3 id="余談2"><a href="#%E4%BD%99%E8%AB%872">余談2</a></h3> <p>上記の <code>README</code> に記載がありますが、 <code>conf.modules.d/</code> の <code>.conf</code> ファイルは <code>00-base.conf</code> や <code>01-cgi.conf</code>, <code>15-php.conf</code> というように数字2桁のプレフィックスが付いています。</p> <blockquote> <p>Files are processed in sorted order and should have a two digit numeric prefix.</p> </blockquote> <p>このプレフィックスは数字で順番がソートされ、 <code>.conf</code>ファイル が読み込まれる順番が決まる。(そのソートのルールを保つため)プレフィックスは2桁にすべき、ということのようです。</p> <p>ソート順を保つためであって、 <code>01</code> や <code>15</code> の数字そのものに意味はなさそうな気がしました。</p> <p>何故ここを気にしたかと言うと、最初は <code>conf.modules.d/</code> に gzip圧縮 の設定ファイルを置こうとしていて、かつ deflate が元々は「空気を抜く、しぼませる」という意味なので気体にあやかって 22.4l で <code>224-deflate.conf</code> という名前にしようかと思ったためです( <code>README</code> を読んで止めましたが)。</p> <h3 id="余談3"><a href="#%E4%BD%99%E8%AB%873">余談3</a></h3> <p><code>.conf</code>ファイル を読み込むのに、 <code>httpd.conf</code> の中で <code>Include</code> と <code>IncludeOptional</code> の2つのディレクティブが既述されていたのでメモ。</p> <p>これらの違いは「<code>IncludeOptional</code> は指定されたファイルやディレクトリが存在しない場合でもエラーが発生しない」という点のようです。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="gzip圧縮"><a href="#gzip%E5%9C%A7%E7%B8%AE">gzip圧縮</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://itsakura.com/apache-gzip">Apache gzipでファイルを圧縮して転送する | ITSakura</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/tsukue/items/9ad0d8612879cabbd066">【初心者向け】Apacheでgzip - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.softel.co.jp/blogs/tech/archives/4240">【Apache】gzip圧縮してみる(帯域対策、Webサイト高速化) at softelメモ</a></li> <li><code>SetOutputFilter</code>: <a target="_blank" rel="nofollow noopener" href="https://httpd.apache.org/docs/2.4/ja/mod/core.html#setoutputfilter">core - Apache HTTP サーバ バージョン 2.4</a></li> </ul> <h3 id="MIMEタイプ"><a href="#MIME%E3%82%BF%E3%82%A4%E3%83%97">MIMEタイプ</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">よくある MIME タイプ - HTTP | MDN</a></li> </ul> <h3 id="Include と IncludeOptional"><a href="#Include+%E3%81%A8+IncludeOptional">Include と IncludeOptional</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/100/items/ab31e57fcc66ac661d5c">Apache 2.4 設定ファイルの記述例 - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/false-git@github/items/650895076217845ad829">FreeBSDのapacheの設定ファイルの変化 - Qiita</a></li> </ul> arm-band