Apacheの設定のほとんどは、httpd.confだけで行えます。httpd.confを編集することでより高いパフォーマンスを引き出したり、セキュアなサイトを作れるなど、細かな挙動を制御できます。httpd.confの設定は奥深く、それだけを解説した書籍が発行されるほどのボリュームがあります。
ここでは、多岐にわたる設定項目の中から要点をかいつまんで紹介します。なお、ソースからインストールした場合は「highperformance-std.conf」ファイルなど、用途に応じてhttpd.confファイルを選択することもできます。
httpdデーモン起動の前に、最低限動作に関係するディレクティブを確認します。
Listen 80
User nobody
Group #-1
ServerAdmin you@example.com
ServerName www.example.com:80
パフォーマンスを見直す際は、次のディレクティブを利用します。ただし、プロセス数やスレッド数などを変更すると、かえってパフォーマンスを悪化させることもあります。ほとんどの用途ではデフォルトのまま使用します。KeepAliveについてはApacheパフォーマンス・チューニングの実践も参考にしてください。
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 #0は無制限を意味する </IfModule>
<IfModule worker.c> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 #0は無制限を意味する </IfModule>
HostnameLookups Off
Webコンテンツ(HTMLファイルなど)を格納するディレクトリを「ドキュメントルート」と呼びます。ドキュメントルートは任意の場所に配置できます。ただし、配置場所を変更する場合は、httpd.confの「DocumentRoot」とそれに対応したディレクティブ(Directory)を変更する必要があります。なお、ドキュメントルートに指定したディレクトリは、「Webサーバとして最小限やっておくべき設定」で紹介した「User」「Group」ディレクティブで設定したユーザー権限で読み込み可能である必要があります。
以下の例では、/home/wwwを新たなドキュメントルートにしています。まず、新たなドキュメントルートのためのディレクトリを作成します。ドキュメントルートにはhtml、icons、cgi-bin、errorディレクトリを用意する必要がありますが、ここでは既存のドキュメントルートをコピーして使用します。cpコマンドに「-Rp」オプションを指定し、ディレクトリを丸ごとコピーしながらユーザー権限情報を保持するようにします。
# cp -Rp /var/www /home/www
次にhttpd.confを修正します。
DocumentRoot "/home/www/html"
<Directory "/home/www/html">
Alias /icons/ "/home/www/icons/" <Directory "/home/www/icons">
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory "/home/www/cgi-bin">
Alias /error/ "/home/www/error/" <Directory "/home/www/error">
ドキュメントルートを変更することで、バックアップが取りやすくなったり、より大きなディスクスペースを確保できます。しかし、MRTGやAnalogなど、Webコンテンツを使用するパッケージをRPMパッケージユーティリティでインストールすると古いドキュメントルートにインストールされるため注意が必要です。
セキュリティ対策は一概に論ずることができないほど、多くの検討事項が存在します。ここでは、httpd.confの編集だけでできる対策に絞って解説します。IP認証によるアクセス制限のテクニックも参考にしてください。
Apacheのデフォルト設定では、ApacheのバージョンやApacheを稼働させているサーバのOSなど、プラットフォームの情報を外部から取得することができます。こうした情報が取得されたからといって、即攻撃や不正アクセスの被害に遭うわけではありません。逆に、情報を隠したからといって被害に遭わないようになるわけでもありません。とはいえ、攻撃者に対して進んでサーバの情報を提供する必要はありません。
サーバ情報の出力は、ServerTokensおよびServerSignatureディレクティブで制御します。それぞれ、以下のように設定します。
ServerTokens ProductOnly ServerSignature Off
「.htaccess」ファイルを使用すると、サーバのグローバル設定とは別に、そのディレクトリのみに限定した設定を行うことができます。しかし、管理者が意図しない設定をユーザーが実施するなどの危険もあります。次のようにしてデフォルトでは.htaccessファイルの使用を禁止し、必要なディレクトリに対してのみ解放するようにします。
まず、すべての.htaccessファイルを無効にします。
<Directory /> (省略) AllowOverride None ←.htaccessによる制限上書きを禁止 </Directory>
次に、.htaccessファイルを許可するディレクトリを個別に指定します。
<Directory /許可するディレクトリのフルパス/> (省略) AllowOverride All ←.htaccessによる制限上書きを許可 </Directory>
また、各ユーザーのホームディレクトリ中でコンテンツの公開を許可している場合、公開を許可しないユーザーを指定することができます。
<IfModule mod_userdir.c> UserDir disable root #最低限rootは公開しないようにする UserDir public_html </IfModule>
httpd.confで行うセキュリティ対策を紹介しましたが、httpd.confでできることには限りがあります。DDoS攻撃などはアプリケーションレイヤではなく、カーネルレイヤで対応する方が効果的です。ステートフルパケットフィルタを使ったサービスの公開で、iptablesを使ったWebサーバのセキュア化の手法を紹介しています。こちらも参考にしてください。
セキュリティ対策は、何から何を守るのか、保護の対象となる情報やサービス、攻撃元として想定される外部のサーバや内部のユーザーなど、系統立てて対処する必要があります。セキュリティ対策は、ログの調査やサーバのステータス確認など、地道な定常運用の積み重ねが必要です。httpdのバージョンアップもその地味な努力の1つです。セキュリティについては、今後も必要に応じて随時取り上げていきます。
httpd.confに間違いがあれば、httpdデーモン起動時にエラーを出力します。また、httpdの実行時に「-t」オプションを指定することで、起動前に確認できます。-tオプションを指定するとデーモンは起動せず、httpd.confのチェックのみを行います。
# /usr/sbin/httpd -t Syntax OK
apachectlコマンドで確認することもできます。
# /usr/sbin/apachectl configtest Syntax OK
コマンドラインから起動する場合は、Apache 2.0の新機能とその実力で紹介されているように、apachectlを使用するのが簡単です。
# /usr/sbin/apachectl start
Webブラウザでサーバにアクセスし、画面3のように表示されれば成功です。
もし起動に失敗するようなら、/var/log/httpdディレクトリにあるerror_logを確認します。同じサービスポート番号でほかのサーバがすでに起動している場合にもエラーが発生しますが、大抵の場合はhttpd.confの記述に不備があることが原因です。
終了は、apachectlの引数にstopを指定します。
# /usr/sbin/apachectl stop
Webサーバを常時稼働させるなら、apachectlでいちいち起動するわけにはいきません。そこでシステム起動時のサービスとして登録し、サーバの起動/終了に合わせてデーモンも起動/終了するようにします。
RPMでインストールした場合、起動スクリプトが/etc/init.d/httpdとしてインストールされています。ソースからインストールした場合は、ソースディレクトリ中のbuild/rpm/httpd.initファイルを利用します。Red Hat、Fedora Core、SUSE、Turbolinuxといったディストリビューションでは、サービスの登録にchkconfigコマンドを利用します(注)。
# chkconfig --level 35 httpd on #ランレベル3、5でオン # chkconfig --list httpd #登録状況の確認 httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
注:ソースからインストールした場合は、事前に/etc/init.d/httpdを用意しておく必要があります。
# cp ..ソースディレクトリ/build/rpm/httpd.init /etc/init.d/httpd
ディストリビューション付属のGUIユーティリティを使ってもサービスの登録が可能です。
今回は、取りあえずApacheをWebサーバとして機能させるまでを駆け足で解説しました。すでに過去の記事で解説されている機能については、説明を最小限にとどめています。詳しくはリンク先の記事を参照ください。次回からは、Apacheのチューニングや負荷分散について解説する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.