WordPressの標準Webサーバーとして用いられるApache。今回はそのApacheの役割と、Apacheの設定ファイルを編集する事でレスポンス速度を引き上げる方法をご紹介します。
Apacheとはなにか
一般に、WordPressはLAMP環境と呼ばれるサーバー構成の上で稼動しています。LAMP環境とはLinux(サーバーのOS)、Apache(Webサーバー)、MySQL(データベース)、PHP(アプリケーション)の4つの頭文字をとった造語で、ApacheはWebサーバーと言われる役割を果たします。
WebサーバーにはApaceh以外にもNginxなども存在し、Ruby On Railsでは標準でApacheではなくNginxが利用されています。
Webサーバーの役割
Webサーバーの役割は主にHTTPリクエストとHTTPレスポンスの管理です。ブラウザから受け取ったHTTPリクエストに対して、サーバー内のディレクトリの中から適切なファイルを読み出し、ステータスコードとともにブラウザへ送り返す機能を担います。
.htaccessというファイルを編集されたことのある方もいらっしゃるのではないでしょうか?.htaccessとは実はApacheの設定ファイルで、このファイルを編集する事でApacheの挙動を制御する事ができるのです。
ApacheとWordPress
WordPressでパーマリンクを設定された事のある方も多いかと思います。パーマリンクを編集するということはつまり、「URLへのリクエストと対応するファイルの関係を編集する」ということです。
http://example.com/post_id というURLへのリクエストに対してはsingle.phpを展開する
となっていたものを、今度からは
http://examole.com/category/post_idというURLへのリクエストに対してsingle.phpを展開する、というようにURLとファイルとの対応関係を書き換えるわけです。
この部分はまさにApacheが司る工程であり、WordPressは.htaccessファイルに編集を加えることでパーマリンクの書き換えを実現しています。
Apacheのパフォーマンスチューニング
今回はApacheのパフォーマンスチューニングとして、httpd.confの利用、Expiresヘッダー、gzip、keepaliveをご紹介します。
レスポンス高速化の指針
Webアプリケーションのレスポンス速度を引き上げる方法は、「データ転送量を減らす」(ページキャッシュの利用、gzipによる圧縮、cssスプライト、minifyによるコード軽量化など)、「HTTPリクエスト数を減らす」(Expiresヘッダーなど)の2つの方針があります。
HTTPリクエストを削減するExpiresヘッダー
ブラウザで以前にアクセスした事のあるWebサイトを閲覧するとき、前回のアクセス時にダウンロードしたファイル(ローカルキャッシュ)のダウンロード日時と、サーバー上のファイルの更新日時を照合し、前回アクセス時からの更新がなければダウンロードをせずにローカルにあるファイルをブラウザに表示します。
Expiresヘッダーとは、「このファイルは今後何日間は更新しません」という通知をブラウザに送るものになります。
その結果、通常のキャッシュでは発生していた「ローカルファイルとサーバー上のファイルの更新日時の整合」すらも行われなくなり、HTTPリクエストの数を大幅に削減する事が出来ます。
Expiresヘッダーの設定は、httpd.confおよび.htaccessを編集する事で設定出来ます。
gzip圧縮
zip形式でファイルを圧縮するのと同じように、サーバー上のファイルもgzipというデータ形式で圧縮して送信し、ブラウザ側で展開することができます。
これによりデータ送信容量を削減する事が出来るので、特に画像ファイルなどが多いサイトでは絶大な威力を発揮します。
こちらもhttpd.conf、.htaccessを編集する事で設定出来ます。
KeepAlive
HTTP通信はステートレス(状態を持たない)な通信なので、通常であれば1回のリクエストごとに通信が切れてしまいます。
しかし、現在では画像ファイルやスタイルシートなど1つのページを表示するにも複数のリクエストが発生しますので、これでは効率が良くないです。
KeepAliveはセッションを保持する仕組みで、これにより一度の接続で複数のリクエストを送信する事が出来るようになります。
こちらはhttpd.confファイルで設定出来ます。
おわりに
Apacheのチューニングで高速化を実現するための基本的な設定をご紹介しました。
WordPressのパフォーマンスチューニングにおいて、闇雲にキャッシュ系のプラグインに手を出すとかえってパフォーマンスが落ちてしまう場合もあり、できれば自分で調べて手動で設定するのがお勧めです!