WEBサーバを立てたら行うApacheの基本設定

このブログを先日より使っているさくらのVPSに移行しました。その際のApacheの基本設定です。

まずは、ホストの設定

なにはともあれホストの設定です。他の用途にも使いたいし、画像は別ホストだったりするので、バーチャルホストを設定します。

# vi /etc/httpd/conf.d/vhost.conf
NameVirtualHost *:80

<VirtualHost *:80>
    ServerName   blog.flatlabs.net
    DocumentRoot /var/www/html/blog.flatlabs.net
</VirtualHost>

<VirtualHost *:80>
    ServerName   blogimg.flatlabs.net
    DocumentRoot /var/www/html/blogimg.flatlabs.net
</VirtualHost>

バーチャルホストという用語は、1 台のマシン上で (www.company1.com and www.company2.com のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。

Apache バーチャルホスト説明書 – Apache HTTP サーバ

KeepーAliveを有効に

KeepAliveを有効にして、一度のTCP接続で複数回のリクエストを処理できるようにします。一回の接続で、画像、js、css等を含む1ページすべてのコンテンツを返すことを目安にします。

KeepAliveTimeoutのデフォルト値は15秒になっていますが、これでは接続時間が長すぎて効率が悪いので3秒に設定します。また、1回の接続で受け付けるリクエストの最大値であるMaxKeepAliveRequestsを32に設定しておきます。

vi /etc/httpd/conf/httpd.conf
KeepAlive On
MaxKeepAliveRequests 32
KeepAliveTimeout 3

HTTP/1.0 の Keep-Alive 拡張と HTTP/1.1 の持続的接続の機能は、 複数のリクエストが同じ TCP の接続で送られる、長時間持続する HTTP セッションを提供します。

core – Apache HTTP サーバ

mod_deflateを使ってgzip圧縮配信

mod_deflateを使って、コンテンツを圧縮して配信することで通信量を減らすことができます。

なお、受け取ったデータの解凍コストは、ブラウザが担うことになる為、ブラウザが、gzip圧縮レスポンスに対応している必要がありますが、よほど古いブラウザでない限り対応しています。

以下が設定です。古いブラウザの場合や画像、Flash等の圧縮効果が低いものを除外して圧縮配信します。

vi /etc/httpd/conf/httpd.conf
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(gif|jpe?g|png|swf|ico)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>

モジュールは DEFLATE 出力フィルタを提供します。これはサーバからの出力を、ネットワークを 通してクライアントに送る前に圧縮することを可能にします。

mod_deflate – Apache HTTP サーバ

mod_expiresを使って有効期限を付加

コンテンツの有効期間(Expires HTTP Header)を設定して、指定期間の間ブラウザキャッシュを有効にします。

今回は、とりあえず画像系のコンテンツを設定しておきます。写真(jpg)は、ほぼ変更がないので1年、画面を形成するための画像(PNG)は、たまに変更があったりするので、14日に設定しておきます。

また、この設定はホストごとに設定を変えたいとこだったりしますので、VirtualHost内に設定します。

vi /etc/httpd/conf.d/vhost.conf
ExpiresActive On
ExpiresByType image/png "access plus 14 days"
ExpiresByType image/jpeg "access plus 1 years"

Expires HTTP ヘッダ と Cache-Control ヘッダの max-age ディレクティブの 設定を制御します。元のファイルが作成された時刻または クライアントのアクセス時刻のどちらかに基づいて期限切れ日を 設定することができます。
mod_expires – Apache HTTP サーバ

設定反映の確認

以上で設定は完了したので、HTTPのヘッダーを見ながら設定の反映を確認します。

htmlファイルのヘッダーです。Keep-Aliveが有効で、圧縮配信されていることが確認できます。

Content-Encoding: gzip
Keep-Alive: timeout=3, max=32
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

画像(jpg)ファイルのヘッダーです。Keep-Aliveが有効で、有効期間(Expires)が設定されていることが確認できます。

Cache-Control: max-age=31536000
Expires: Wed, 29 Feb 2012 03:48:53 GMT
Keep-Alive: timeout=3, max=32
Connection: Keep-Alive
Content-Type: image/jpeg

最後に

もろもろ設定するとまだいろいろありますが、とりあえずは最低限というとこで。

カテゴリー: サーバ・インフラのこと   タグ: ,   この投稿のパーマリンク

トラックバック

WEBサーバを立てたら行うApacheの基本設定 への1件のコメント

  1. ピンバック: Apacheの「mod_cache」を使って手軽にコンテンツキャッシュを行う。 – FlatLabs

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>