Apache Web サーバ

Apache Web サーバは、現在最も広く使われている Webサーバであり、2013年5月現在でのシェアは約53%となっている
参照:Web Server Survey | Netcraft

Apache のモジュール

モジュールとは、Apache にさまざまな機能を提供するプログラム部品。必要に応じて Apache の機能を柔軟に構成できるようになっている。
参照:Module Index - Apache HTTP Server

Apache の設定

Apache の設定は /etc/httpd/conf/httpd.conf を中心とした設定ファイルで行う。設定終了後は Apache を再起動させる必要あり。
Apache を起動したり、終了したりするには2種類

  • 制御スクリプト /etc/init.d/httpd
  • service コマンド
引数 内容
start 起動
stop 停止
restart 再起動
reload 再読み込み
graceful 安全な再起動
configtest 構文チェック

基本的な設定

Apache の主要な設定ファイルは /etc/httpd/conf/httpd.conf 。それ以外にも /etc/httpd/conf.d/ ディレクトリ以下に補助的な設定ファイルがある。 /etc/httpd/conf.d/ ディレクトリ以下の設定ファイルは、httpd.conf 内に読み込まれて利用される

Apache の設定ファイル
ファイル 内容
/etc/httpd/conf/httpd.conf 主要な設定
/etc/httpd/conf/magic.conf MIMEタイプの設定
/etc/httpd/conf.d/manual.conf オンラインマニュアルの設定
/etc/httpd/conf.d/perl.conf スクリプト言語 Perl を利用するための設定
/etc/httpd/conf.d/php.conf スクリプト言語 PHP を利用するための設定
/etc/httpd/conf.d/python.conf スクリプト言語 Python を利用するための設定
/etc/httpd/conf.d/ssl.conf SSL を利用するための設定
/etc/httpd/conf.d/webalizer.conf アクセス解析ツール Webalizer の設定
/etc/httpd/conf.d/welcome.conf デフォルトページの設定

httpd.conf の設定項目

httpd.conf は3つのパートから構成されている

  • Section1 : Grobal Environment (サーバ自体の全般設定)
  • Section2 : 'Main' Server configuration (メインの Webサーバの設定)
  • Section3 : Virtual Hosts (バーチャルホストの設定)

httpd.conf の設定項目はディレクティブと呼ばれ、記述形式は

ディレクティブ名 設定値

タグを使って範囲を指定することもできる。

  • Directory タグは設定が有効なディレクトリ単位の指定
  • Files タグはファイル単位での指定
  • Location タグは URL 単位での指定

※ Directory タグや Files タグでは、ドキュメントルートとは無関係に、ファイルやディレクトリのフルパスで指定する。また、「*」、「?」などのメタキャラクタが利用できる。

<Directory ディレクトリ名> ~ </Directory>

<Directory hoge/> ~ </Directory>
レスポンスヘッダ内に含める情報の指定
ServerTokens OS

サーバ名やバージョンが特定されると、クラッカーが攻撃ツールを選定しやすくなるため、バージョン番号を表示させない方が安心感あっぷ。この場合「Prod」

設定値 表示例
Prod Server: Apache
Major Server: Apache/2
Minor Server: Apache/2.0
Min Apache/2.0.52
OS Apache/2.0.52 (CentOS)
Full Apache/2.0.52 (CentOS) PHP/4.4.3
トップディレクトリの指定

httpd が利用するトップディレクトリを指定

ServerRoot "/etc/httpd"
KeepAlive の有効/無効の指定

KeepAlive を有効にすると、1回のTCPセッションで複数のHTTPリクエスト/レスポンスを処理する。これによって、大量の画像を用いているページなどの表示が速くなる。KeepAliveRequests は1つのキープアライブで処理する最大数を、KeepAliveTimeout はキープアアライブのタイム後時間(秒)を指定する。

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Apache の子プロセスの設定

バージョン2.0以降の Apache は複数の実装を持つ。 mpm-prefork は旧来の Apache と同様の実装。このタグ内では、 Apache の子プロセスの設定を行う。Apache は 80番ポートでリクエストを受け付ける親プロセス (root ユーザー権限で実行) と、個々のクライアントに応答する子プロセス (User ディレクティブで指定したユーザー権限で実行)から構成される。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>
StartServers Apache 起動時にスタートする子プロセス数を指定
MinSpareServers 待機している子プロセスの最少数を指定
MaxSpareServers 待機している子プロセスの最大数を指定
ServerLimit MaxClients で設定可能なサーバプロセス数の上限を指定
MaxClients 子プロセスの最大数を指定
MaxRequestPerChild 個々の子プロセスが処理することのできるリクエストの制限数を指定
サーバが待ち受けるポートの設定

サーバが待ち受けるポート番号を指定する。Webサーバは通常80番ポートを利用する。

Listen 80
起動時に読み込むモジュールの設定

起動時に読み込むモジュールを指定する。モジュールは /etc/httpd/modules/ ディレクトリ以下に格納されている。

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
etc...
子プロセスの実行ユーザーと実行グループの指定

Apache の子プロセスの実行ユーザーと、実行グループを指定する

User apache
Group apache
サーバ管理者のメールアドレスの指定
ServerAdmin riceplanting@www.hogehoge.com
ホスト名とポート番号の指定
ServerName www.hogehoge.com:80
ディレクトリ以下の設定

Options FollowSymLinks はシンボリックリンクをたどることを許可する。
AllowOverride None は、.htaccess ファイルによる設定の上書きを抑制する

<Directory "/">
    Options FollowSymLinks
    AllowOverride None
</Directory>
hoge/ ディレクトリ以下の設定

Options Indexes は、ブラウザでのインデックス表示(ディレクトリを指定してアクセスした際にファイル名一覧を返す)を許可する。
Order allow, deny や、 Allow from all はホストベースのアクセス制御を表す。
AllowOverride は、分散設定ファイルで上書きを許可するディレクティブの種類を定義する

<Directory "hoge/">
    Options Indexes FollowSymLinks
    AllowOverride None
    Oder allow, deny
    Allow from all
</Directory>

AllowOverride の設定値

設定値 内容
None 一切の上書き不可
All .htaccess 内で利用可能なすべてのディレクティブが利用可能
AuthConfig 認証に関するディレクティブが利用可能
FileInfo ドキュメントタイプを制御するためのディレクティブが利用可能
Indexes ディレクトリインデックスを制御するためのでぃれくち部が利用可能
Limit ホストベースのアクセス制御に関するディレクティブが利用可能
Options 特定のディレクトリにおける機能を指定するためのディレクティブが利用可能
ユーザー別のWebサイト公開の指定

ユーザー個々に Webサイトを公開するかどうかを指定する。
UserDir disable の場合、個々の Webサイトは公開されない
UserDir public_html の場合、「http://ホスト名/~ユーザー名」でアクセスしたときにホームディレクトリ内の public_html 内にアクセスすることになる

<IfModule mod_userdir.c>
    UserDir public_html
</IfModule>
URL 未指定の際に、インデックスとして返すファイル名の指定

URL でファイル名が指定されなかった場合にインデックスとして返すファイル名を指定。 Apache は指定されたファイル名を順にチェックし、最初に見つかったものを返す。見つからなかった場合かつ Indexex オプションがセットされているときはファイル名一覧を返す。

DirectoryIndex index.html index.html.var index.php
分散設定ファイル名の指定

個々のディレクトリ内に分散設定ファイルを置くことで、そのディレクトリ以下に適用する設定を上書きできる。その分散設定ファイル名を指定する。

AccessFileName .htaccess
CGI プログラムのあるディレクトリへのマッピングを指定

CGI プログラムが格納されているディレクトリへのマッピングを指定する。「http://ホスト名/cgi-bin/foo.cgi」でアクセスした場合、「/var/www/cgi-bin/foo.cgi」が実行されることを表す。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
レスポンスへのデフォルトの文字設定の指定

明示的に文字セットを指定していないレスポンスに追加されるデフォルトの文字セットを指定する。デフォルトではUTF-8。が、HTMLファイルが EUC-JP や SJIS で記述されていた場合は文字化けが発生する。
ここはコメントアウトしておくのが無難?

AddDefaultCharset UTF-8