連載
» 2011年09月30日 00時00分 公開

仕事で使える魔法のLAMP(24):設定ファイルを作成してApacheを動作させる

前回、設定ファイルや公開ディレクトリの配置について解説しました。今回は設定ファイルを作成し、Apacheサーバを動作させ、Webブラウザから動作させてみます(編集部)

[山口晴広,株式会社イメージズ・アンド・ワーズ]

詳細な設定値を変えていく

 第21回からApache HTTP Server(以下Apache)の設定について解説しています。前回はApacheの設定ファイルや、バーチャルホストごとの関連ディレクトリなどをどのようにレイアウトすると運用管理が楽になるかということを解説しました。

 今回は設定ファイルの詳細な設定項目の解説に入っていきます。そして、実際に設定をして実際にApacheを起動してみます。レイアウトはもちろん前回の内容を踏襲し、設定ファイルはApacheのインストールディレクトリにあるファイルを利用して、これを改変して設定を変更します。

 本連載では、さくらインターネットのVPSのアカウントを利用させて頂いてます。これまでも、VPS上でいろいろ操作してきましたが、今回はこのサーバ上に実際に動作するWebサーバを構築します。Apacheは「/opt/apache-httpd-2.2.21」にインストールしてあるものとします。

標準の設定ファイルを利用する

 前回解説しましたが、初期状態の設定ファイルはインストールディレクトリの「conf/httpd.conf」と、ここから追加で読み込まれるいくつかのファイルから成り立っています。まずは「conf/httpd.conf」から書き換えていきます。

 ファイルを開いて見ていきましょう。

Listen 80

 という行があります。これはコメントアウトしましょう。80番ポートで待ち受けるという設定ですが、バーチャルホストと一緒に設定した方が明確で分かりやすいので、ここでは設定しません。「Listen」で同じポート番号を指定すると起動しませんので、コメントアウトは忘れずに。

 次は、使用するモジュールの設定です。標準ではビルドしたすべてのモジュールが有効になっていますので、使わないものはコメントアウトします。セキュリティ対策の観点からも、使わないものは不用意に有効にしないようにしましょう。

 先に進むと、Webで公開するディレクトリなどの設定があります。これはデフォルトのバーチャルホストに関係する設定です。デフォルトのバーチャルホストは使いませんので、これらの設定はそのままにしておいてよいでしょう。バーチャルホストを設定すればデフォルトのバーチャルホストが表に出てくることはありません。

 ただし、次の設定は念のためにコメントアウトしておきます。

ScriptAlias /cgi-bin/ "/opt/apache-httpd-2.2.21/cgi-bin/"

 これはCGIを実行できるディレクトリを指定するものです。設定を間違えてデフォルトのバーチャルホストに接続できるようにしてあるとき、管理者の把握していないCGIがここに存在しているとセキュリティ上のリスクになります。

 そして最後の方にある「Include」ディレクティブですが、少なくとも次の2つの行のコメントマーク(#)を取り除き、有効にします。

#Include conf/extra/httpd-mpm.conf
#Include conf/extra/httpd-default.conf

 autoindexモジュールでディレクトリを一覧表示をするなら、次の行のコメントマークも取り除きます。このファイルでは、一覧表示で使う各種アイコンを「/icons/」というURLでアクセスできるように定義しています。

#Include conf/extra/httpd-autoindex.conf

 ほかにも「Include」ディレクティブはありますが、基本的なWebサーバであればこのくらいでよいでしょう。

 最後に次の行を追加します。

Include /srv/httpd/apache.conf

MPMによって設定を変える

 引き続き、「Include」で読み込むファイルを編集します。「conf/extra/httpd-mpm.conf」ですが、ここでは同時接続数の最大値や、起動直後のサーバプロセス数などを指定します。ビルド時に選択したMPM(第14回参照)によって設定に使うディレクティブが異なります。

 ディレクティブは「IfModule」というセクションによってMPMごとに区切られています。preforkを選択していますので「mpm_prefork_module」というセクションの中を編集します。標準の内容は次のようになっています。

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

 「MaxClients」は最大の同時接続数になります。この設定を超えた数のアクセスがやってきても、サービスを提供できません。アクセスの多いサーバではこのパラメータの調整が必要になってきます。むやみに増やすとメモリが不足しますし、PHPなどのWebアプリケーションを動作させる場合は、1接続当たりに必要な処理量が多くなり、プロセッサが追い付かなくなります。100くらいからはじめて、状況に合わせて調整していくのがよいでしょう。もしメモリやプロセッサの限界に近づくようであれば、台数を増やしたり性能のよいハードウェアを用意するなどの対策が必要です。

 prefork MPMの場合、1接続が1プロセスになります。この例では同時接続数が最大になったときに150個のプロセスになるわけです。「StartServers」はApacheが起動したときのサーバ数です。定常的にアクセス数の多いサーバであれば増やしておくべきですが、増やしすぎると起動時にプロセスの生成に時間がかかります。こうなると再起動に時間がかかりますので要注意です。

 「MinSpareServers」と「MaxSpareServers」はスペアのプロセス数の設定です。Apacheでは接続が来てからプロセスを増やすのではなく、あらかじめ余分にいくつかのプロセスを起動しておくようになっています。MaxとMinはその最大値と最小値になります。

 アクセス数が減ってきて仕事をしていないプロセス数が「MaxSpareServers」以上になれば、その分プロセスを終了させます。アクセスが増え、仕事をしていないスペアのプロセス数が「MinSpareServers」を下回るとプロセスを起動して増やします。これらの設定値は、標準の値から大幅に変えなくともよいでしょう。

 「MaxRequestsPerChild」は、1つのプロセスが処理できるリクエストの数です。0に設定すると「無制限」ということになります。例えば5000に設定すると、5000回のリクエストを処理した後にプロセスは終了します。その後「MinSpareServers」の設定によってはプロセスがまた起動することになります。基本的に0、無制限のままでいいのですが、PHPを利用しているときに使用メモリが一方的に増え続けてしまう、いわゆるメモリリークが疑われる場合などに設定を変更します。

 もう1つ読み込んでいるのが「conf/extra/httpd-default.conf」です。このファイルではいくつかのデフォルト値を設定しています。この中で変更した方がよいのは「ServerTokens」です。サーバのバージョンやOSなどの情報をHTTPのレスポンスで通知するかどうかを設定するものです。

 サーバのバージョンを開示するということは、リスクになり得ます。例えば第20回で、Apacheの脆弱性が発見されたためアップデートが必要であることを紹介しました。もし、バージョンを開示する設定になっていて、しかもアップデートを済ませていなかったら、ここに脆弱性がありますよと公言しているようなものです。なるべくリスクを排除するために、次のようにできるだけ情報を開示しない設定にします。この場合はApacheであることだけを通知します。

ServerTokens Prod

 以上でインストールディレクトリにある設定ファイルの変更は終わりです。

バーチャルホストの設定

 次はバーチャルホストの設定です。ディレクトリ構造のレイアウトは前回を参照していただくとして、早速設定ファイルを作成します。まずは「/srv/httpd/apache.conf」です。

Listen 49.212.32.64:80
NameVirtualHost 49.212.32.64:80
 
<VirtualHost 49.212.32.64:80>
    Include /srv/httpd/49.212.32.64/apache.conf
</VirtualHost>
 
<VirtualHost 49.212.32.64:80>
    Include /srv/httpd/www3026ub.sakura.ne.jp/apache.conf
</VirtualHost>

 さきほど「Listen」をコメントアウトしましたが、ここでIPアドレスとともに指定しています。複数のネットワークインターフェイスがある場合、ポート番号だけを指定するとすべてのネットワークインターフェイスでサービスを提供することになってしまいます。このようにバーチャルホストごとに、IPアドレスも具体的に設定しておきましょう。

 バーチャルホストを2つ定義していますが、1つ目のバーチャルホストは、ホスト名ではなくIPアドレスによるアクセスを受けるためのバーチャルホストです。第22回で解説したスキャン除けに使います。

 次に「/srv/httpd/apache.con」から読み込んでいる「/srv/httpd/49.212.32.64/apache.conf」の内容です。

ServerName 49.212.32.64
 
CustomLog /srv/httpd/49.212.32.64/logs/access.log combined
 
LogLevel warn
ErrorLog /srv/httpd/49.212.32.64/logs/error.log
 
DocumentRoot "/srv/httpd/49.212.32.64/webspace/"
<Directory "/srv/httpd/49.212.32.64/webspace/">
    Options None
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>

 続けて「/srv/httpd/www3026ub.sakura.ne.jp/apache.conf」の内容です。

ServerName www3026ub.sakura.ne.jp
 
CustomLog /srv/httpd/www3026ub.sakura.ne.jp/logs/access.log combined
 
LogLevel warn
ErrorLog /srv/httpd/www3026ub.sakura.ne.jp/logs/error.log
 
DocumentRoot "/srv/httpd/www3026ub.sakura.ne.jp/webspace/"
<Directory "/srv/httpd/www3026ub.sakura.ne.jp/webspace/">
    Options None
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>

 両者の違いは、「ServerName」がIPアドレスかホスト名かという点と、ディレクトリの違いのみです。この設定を基本に、必要に応じて設定を追加していくことになります。

 設定ファイルの編集はこれで完了です。後は、「DocumentRoot」で指定される公開ディレクトリにHTMLファイルを設置します。今回は例として「このサイトはwww3026ub.sakura.ne.jpです。」というメッセージを記述したファイルを置きました。IPアドレスのバーチャルホストの方では、サーバのIPアドレスを示すメッセージにしています。

起動してWebブラウザからアクセス

 これでApacheを起動できる状態になりました。Apacheの起動や終了などの制御は「bin/apachectl」コマンドを使います。このコマンドでは、設定ファイルのチェックもできますので、まずはチェックを実行しましょう。次のように引数に「configtest」を指定します。

$ sudo /opt/apache-httpd-2.2.21/bin/apachectl configtest
Syntax OK

 このように表示されれば設定ファイルにミスはありません。サーバを再起動するときは、必ず設定ファイルをチェックしてください。もしミスがあると、再起動せずにそのまま終了してしまいます。

 Apacheを起動するには「start」を指定します。

$ sudo /opt/apache-httpd-2.2.21/bin/apachectl start

 無事起動すれば何のメッセージも現れません。それではWebブラウザからApacheサーバにアクセスしてみましょう。IPアドレスでアクセスしたときと(図1)、ホスト名でアクセスしたとき(図2)のそれぞれで表示が変わります。

図1 IPアドレスを指定してアクセスしたときの結果 図1 IPアドレスを指定してアクセスしたときの結果
図2 ホスト名を指定してアクセスしたときの結果 図2 ホスト名を指定してアクセスしたときの結果

 Apacheを終了するには「stop」、再起動するには「restart」を使います。同じような操作に「graceful-stop」と「graceful」というものがあります。これは接続中のクライアントがある場合、その終了を待ってから終了・再起動するためのものです。運用中はこちらを使うのがよいでしょう。

 Apacheの設定に関する解説は以上です。次回からはPHPのビルドに取りかかります。

著者紹介

株式会社イメージズ・アンド・ワーズ
代表取締役
山口晴広(やまぐち はるひろ)



「仕事で使える魔法のLAMP」バックナンバー

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。