前回、設定ファイルや公開ディレクトリの配置について解説しました。今回は設定ファイルを作成し、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
引き続き、「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アドレスを示すメッセージにしています。
これで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)のそれぞれで表示が変わります。
Apacheを終了するには「stop」、再起動するには「restart」を使います。同じような操作に「graceful-stop」と「graceful」というものがあります。これは接続中のクライアントがある場合、その終了を待ってから終了・再起動するためのものです。運用中はこちらを使うのがよいでしょう。
Apacheの設定に関する解説は以上です。次回からはPHPのビルドに取りかかります。
Copyright © ITmedia, Inc. All Rights Reserved.