Apache Webサーバー_________ |
目的別Apacheの設定 |
サーバーの稼動状況をブラウザで確認したい |
mod_statusモジュールを使います。これはデフォルトでは組み込まれていないため、httpd.confを開き
#LoadModule status_module modules/mod_status.so (UNIX版)
#AddModule mod_status.c
#LoadModule status_module modules/ApacheModuleStatus.dll (Windows版)
のコメントを解除し、更に
#<Location /server-status>
#SetHandler server-status
#Order deny,allow
#Deny from all
#Allow from 自マシンのアドレス(セキュリティーのため)
#</Location>
のコメントを解除し、Apacheを再起動します。その後、ブラウザから http://サーバーのアドレス/server-status と入力すればApacheの稼動状況が表示されます。
#ExtendedStatus On
のコメントを解除すると更に詳細な情報を確認することができます。また、server-statusに続いて?autoと入力すると簡略化されたステータス情報を得ることができます。これはExcelなどの表計算プログラムを使ってグラフを作成する場合や、印刷する場合に便利です。このステータス情報は管理者以外の閲覧は好ましくないため、Allow from 自マシンのアドレス と指定し、自分以外からの接続を拒否しておくことが大切です。
Apacheの設定をGUI(グラフィカルインターフェイス)で行いたい |
UNIX版のみの対応となりますが、Webminを利用してみてください。また、日本語での情報はJp.Webmin.Comにあります。tar/gzip形式のアーカイブの他、Linux対応のRPM版もあります。
Apacheの設定ファイルにミスがないかチェックするには |
Apacheの起動時、設定ファイル(httpd.conf)にスペルミスや文法エラーがあると、Apacheはそのミスの箇所を示し、終了します。起動の前にあらかじめ設定ミスやエラーがないかどうかをチェックするにはコマンドラインで
httpd -t
と入力します。エラーがなければ「Syntax OK」と表示されます。エラーがあればその該当行とおおよその内容を表示します。
但し、-Dオプションで起動をコントロールする<IfDefine>で囲まれたブロック内のチェックは出来ません。
Apacheでのセキュリティ保護のための基本設定は |
これはApacheに対してのみではないことですが、セキュリティ保護の基本は「まず全てを拒否してから必要なもののみ許可する」という方式です。Apacheでこれを行うにはhttpd.confで次のように指定します。
<Directory />
Order deny,allow
Deny from all
</Directory>
この指定によりWebサイト内の全てのディレクトリへのアクセスを拒否することができます。/以下の必要なディレクトリに対しては
<Directory /home/foo>
Order allow,deny
Allow from all
</Directory>
のように個別に許可する指定を行います。
ロボットによる検索を制限したい |
Webサイトの大抵の持ち主はインターネット上の著名な検索サービスに自分のサイトを登録してもらうことを望んでいますが、これらのサービスは大半がロボットまたはスパイダーと呼ばれるプログラムを使ってWebサイトに自動的にアクセスしてコンテンツを登録しています。しかしながら、このロボットによる余分なアクセスが原因でアクセス速度が大幅に低下するような場合もあり得ます。ロボットによるアクセスを制限したい場合はDocumentRoot指示子によって指定したディレクトリ(最上位ディレクトリ)に以下の内容を記入したrobots.txtという名前のファイルを置きます。
User-agent: *
Disallow: /
ホスト名やIPアドレスでアクセス制限したい |
Apacheでホスト名やIPアドレスによるアクセス制限を行うにはmod_accessモジュールが提供する各指示子を使います。このmod_accessモジュールはデフォルトで有効になっています。指示子にはOrder、Allow、DenyがありOrderでAllowとDeny指示子を処理する順番を指定します。例えば Order deny,allowと指定すればDeny指示子を処理してからAllow指示子を処理します。
例: 192.168.1.0/24のネットワーク以外からのアクセスを拒否する
Order deny,allow
deny from all
allow from 192.168.1.
尚、この指定の適用対象範囲は、ディレクトリ、ロケーション、.htaccessが対象となります。また、.htaccessを利用する際にはAllowOverride Limit(またはAll)と指定する必要があります。
HTTPレスポンスヘッダからApacheのバージョンを消したい |
ApacheのHTTPレスポンスヘッダにはデフォルトでApacheのバージョン、OS名及びモジュールが返されます。これらを表示させたくない場合にはServerTokens指示子を使います。引数にはFull(デフォルト)、OS、Minimal(Min)、ProductOnlyが指定可能で、それぞれ
Full | Apacheのバージョン、OS名及びモジュール | |
OS | ApacheのバージョンとOS名 | |
Minimal(Min) | Apacheのバージョン | |
ProductOnly | 製品名のみ |
という結果になります。
例としてMinimal(Min)を指定した場合は
ServerTokens Minimal
Apache/1.3.26 とバージョン名のみ表示されるようになります。ProductOnly指定が推奨されます。
また、インデックス表示や、エラーページを表示する際にもバージョンが表示されますので、これを表示されないようにするためには
ServerSignature Off
と指定します。昨今では「GET / HTTP/1.1(または1.0)」と指定し、HTTPサーバーの種類やOS、ApacheのバージョンやPHP、SSLが動作しているかを調べ、該当する脆弱性がある可能性を見つけると次の動作に入るという種の攻撃が多くなっています。このようにバナーを表示させないことにより無用な次の動作を避けることができます。例えセキュリティーホールを抱えてなくとも攻撃の形跡は気持ちの良いものではありません。
Apacheを入手したい |
Apache Webサイト http://www.apache.org/ から最新バージョンを入手してください。
Windows版ApacheとUNIX版Apacheの違いは |
UNIXとWindowsで最も異なる点はUNIXは親サーバーが起動してから要求を処理する子プロセスが作成されるのに対して、Windowsは単独のサーバープロセスが起動された後、それがデータに対する要求を処理するスレッドを開始します。つまりWindowsはマルチスレッドで実行されます。また、httpd.confで定義されているユーザーとしてサーバーを実行できるようにスタンバイサーバーが起動されます。それらのことから、Windows版Apacheではアクティブなサーバーが停止すると全てのスレッドが失われてしまいます。
Windows版Apacheでの設定ファイル記述上の注意点は |
ApacheはUNIXを想定して作成されているため、Windows版Apacheでは利用できない指示子もありますが、設定ファイルにおいてはほぼ同じ形式の記述方法となります。設定ファイル記述上の注意点としてはWindowsのパスを記述する際に\記号ではなく/(スラッシュ)を使うようにします。また、パス指定の際に全体を引用符(")で囲む習慣を付けておくと良いでしょう。
ServerRoot "C:/Program Files/Apache"
また、StartServers、MinSpareServers、MaxSpareServers、MaxRequestsPerChildはUNIX固有の指示子でWindowsでは指定しても何の意味も持ちません。代わりにThreadsPerChild指示子で要求を処理する子スレッドの最大数を設定します。デフォルトは50で、これはサイトが同時に50のヒットを処理できることを示します。
Apacheの設定を行いたい |
Apacheの設定はすべて設定ファイルであるhttpd.confで行います。詳細はApache Web Serverのページを参照してください。
Apacheをインストールしたい |
Apache Web Serverのページを参照してください。またUNIX版についてはソースコードからインストールを参照してください。
とりあえずApacheを動かしたい |
簡単Apacheのページを参照してください。
Apacheを高速化したい |
Apache高速化計画のページを参照してください。
.htaccessファイルを無効にしたい |
<Directory "/">
Options SymLinksIfOwnerMatch
AllowOverride None
</Directory>
と<Directory>の引数に"/"と指定し、AllowOverrideの引数にNoneとすることにより、全てのディレクトリで.htaccessファイル検索を無効にすることができます。
.htaccessファイルを有効にしたい |
Apacheで.htaccessを有効にするには、AllowOverrideの引数にLimitを指定します。
<Directory "/var/www/html">
Options SymLinksIfOwnerMatch
AllowOverride Limit
Order allow,deny
Allow from all
</Directory>
そして、
AccessFileName .htaccess
の行がコメントアウトされていないことを確認します。
.htaccessを有効にした場合の注意点は、例えばhttp://foo.bar.com/.htaccessなどとURL指定された場合でも.htaccessファイルが表示されないように
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
のように指定しておくことが大切です。
ファイルの名前によってアクセス管理を行いたい |
Files指示子を使います。
<Files *foobar*>
Order deny,allow
Deny from all
</Files>
上記ではファイル名にfoobarが含まれるドキュメントや画像に対してアクセス制限(拒否)を行っています。
URLごとにアクセス管理を行いたい |
Location指示子を使います。
<Location /pub>
Order deny,allow
Deny from all
</Location>
<Location>は<Directory>と似ていますが、後者がディレクトリを指定するのに対し、前者はURLを指定します。上記の/pubは正確にはhttp://foo.bar.com/pubですが、http://foo.bar.com/は省略することができます。
特定のディレクトリでパスワード認証を有効にしたい |
AllowOverrideの引数にAuthConfigと指定します。
<Directory "/var/www/html">
AllowOverride AuthConfig
Options None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Auth Access"
AuthUserFile /home/xxx/.htpasswd
Require valid-user
</Directory>
AuthConfigによって許可される認証用指示子には
AuthDBMUserFile、AuthDBMGroupFile、AuthUserFile、AuthGroupFile、AuthName、AuthType、require
があります。
ディレクトリオプションを設定したい |
ディレクトリオプションを設定するにはOptionsの後に引数を指定することにより行います。
<Directory "/var/www/html">
AllowOverride None
Options 引数
Order allow,deny
Allow from all
</Directory>
指定可能な引数の値については、Options指示子の引数ページを参照してください。
個人用Webディレクトリを簡単に指定したい |
UserDir指示子を使います。
UserDir /home/*/public_html
<Directory /home/*/public_html>
AllowOverride None
Options MultiViews SymLinksIfOwnerMatch
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
この場合、例えば/home/fooというユーザーはhttp://foo.bar.com/~foo/と、ユーザーの前に~(チルダ)を付けてURL指定します。
ApacheでCGIが使えるようにしたい |
ApacheでCGIのページを参照してください。
Apacheでmod_perlが使えるようにしたい |
ApacheでCGIのページを参照してください。
ApacheでSSIが使えるようにしたい |
ApacheでSSIを有効にするには有効にしたいディレクトリコンテナの中で
Options +Includes
と指定し
AddType text/html .shtml
AddHandler server-parsed .shtml
のコメントをはずしSSIを含んだWebページ用のハンドラを追加し、ApacheがSSIを含んだWebページを識別できるようにファイル名拡張子を設定します。
LinuxなどのRPMパッケージ版ApacheでCGIが使えない |
LinuxなどのRPMパッケージ版ApacheはデフォルトでsuEXECが機能している場合があります。一定の条件(/etc/passwdのホームディレクトリがApacheのユーザーディレクトリと一致する等)をクリアーしていれば問題なく動作しますが、それ以外のディレクトリでCGIを動作させようとした場合はエラーとなってしまいます。特にsuEXECを必要としないのならsuEXEC機能を無効にしましょう。Linuxなら
which suexec
でsuEXECの場所を確認して(ここでは/usr/sbin/suexec)
mv /usr/sbin/suexec /usr/sbin/suexec.org
とリネームし、その後Apacheを再起動すれば使えるようになっているはずです。
1つのIPアドレスで複数の名前を使いたい |
VirtualHost指示子を使います。
ServerName foo.bar1.com
DocumentRoot /var/www/html1
NameVirtualHost 192.168.1.10
<VirtualHost foo.bar2.com>
ServerName foo.bar2.com
DocumentRoot /var/www/html2
</VirtualHost>
上記は仮想ホストの1つに適用される指示子を<VirtualHost>指示子の外で指定しています。こうすることによりそれ以外の仮想ホストは<VirtualHost>の中に指定されている指示子によってコントロールすることができます。VirtualHost指示子を使うときは注意が必要です。仮想ホストに接続する際旧型ブラウザでは利用できない場合があるからです。
デフォルトの80番以外のポートでリクエストを受け付けたい |
Listen指示子を使います。
Listen 12.34.56.78:8080
書式: Listen <IPアドレス> : ポート番号
ディレクトリインデックスファイルとは |
ディレクトリインデックスファイルとはDirectoryIndex指示子に指定されたファイルの名前のことです。例えばhttp://foo.bar.com/と具体的なファイル名を指定せずURL要求した場合、ApacheはDirectoryIndex指示子に指定された名前のファイルを探し、何も指定されてなかった場合、デフォルトのindex.htmlを探します。これは任意の名前、数のファイル名をインデックスとして指定できる利点がありますが、注意が必要です。複数のインデックスファイル名を指定するとApacheは要求を受け取るたびに複数のファイル名を探すことになるため、応答時間が遅くなってしまいます。十分な理由がない限り、index.htmlとindex.htmを指定しておくのにとどめるほうが無難です。
ディレクトリを装飾的インデックス表示させたい |
該当ディレクトリにindex.htmlなどのインデックスページがないときに装飾的ディレクトリインデックスを生成させるには
IndexOptions FancyIndexing
と指定します。その場合、IconHeight=pixels、IconWidth=pixelsを指定しておくとアイコンのロード時間を短縮できます。デフォルトで用意されているアイコンはApacheアイコンリストを参照してください。また、特定のファイルの内容をインデックスリストの先頭に挿入させるには
HeaderName custom.txt
と指定するとそのファイルの内容が挿入されます。
HTTPヘッダを操作したい |
Apacheがクライアントに送信するHTTP応答ヘッダに情報を追加したい場合はmod_headerモジュールが有効になっていることを確認した後
Header アクション 値
の書式で指定します。アクションにはSet(ヘッダを設定する)、Add(ヘッダを追加する)、Append(既存のヘッダの値に値を追加する)、Unset(ヘッダを削除する)があります。
Header Append Server "Custom Edition"
上記は通常なら「Server Version: Apache/1.3.26」というヘッダを「Server Version: Apache/1.3.26 Custum Edition」と出力させることができます。
ハンドラをファイルタイプと関連付けさせたい |
AddHandler指示子を使います。
AddHandler cgi-script .cgi
上記では末尾が.cgiであるファイルはすべてcgi-scriptハンドラによって処理される必要のあるCGIファイルとして扱われるようになります。同じことをファイル名拡張子ではなくディレクトリやURLについて行うにはSetHandler指示子を使います。例えば特定のディレクトリでSSIを有効にするには
<Directory "/home/*/public_html/cgi-bin">
SetHandler server-parsed
</Directory>
と指定します。
URLを別のURLにリダイレクトしたい |
何らかの事情(引越し等)でURLが変更になった場合、旧のアドレスに対するアクセスも新しいアドレスにリダイレクトさせたい場合があります。この場合、以下のように設定します。
Redirect /~old http://foo.bar.com/~new
尚、Redirectを利用するにはmod_aliasモジュールが有効になっている必要があります。このモジュールはデフォルトで有効になっています。
カスタマイズした404ドキュメントを表示したい |
サーバーが何らかの理由で要求を満たすことができないときに返す標準HTTPエラーメッセージ(404ドキュメントなど)など、Apacheは自動で各ステータスに対してHTML文を表示させますが、左上に内容、下にApacheのバージョンとドメイン名、ポートと味気ないものです。カスタマイズしたドキュメントを表示させるにはあらかじめそれ用のHTMLドキュメントを作成してDocumentRootに格納し
ErrorDocument 404 /missing.html
書式: ErrorDocument <HTTP応答コード> <メッセージ | ファイル名 | URL>
のように指定します。
404ページなどにApacheのバージョンなどのバナーを表示させたくない |
セキュリティ上の理由などからApacheが自動生成するドキュメント中にApacheのバージョンなどのバナーを表示させたくない場合
ServerSignature Off
と指定します。
ApacheをProxy Serverとして動作させたい |
ApacheでProxyサーバーのページを参照してください。
Apacheのログをカスタマイズしたい |
Apacheのログファイルのページを参照してください。
ログをIPアドレスではなくホスト名で出力させたい |
ApacheのログはデフォルトではIPベースで出力されますが、どうしてもホスト名で出力させるには
HostnameLookups On
と指定します。この場合、DNSの逆引きが行われるため、大幅にサーバーのパフォーマンスがダウンします。
アクセスログに参照元とユーザーエージェントも出力させたい |
Apacheのhttpd.confには、アクセスログに参照元とユーザーエージェントも出力させるためのカスタマイズログ形式であるcombinedがデフォルトで用意されています。これを有効にするには
CustomLog logs/access.log combined
と指定します。逆にそれらを出力しないシンプルな形式にしたい場合にはcommonを指定します。
画像取得ログは出力しないようにしたい |
Apacheのログは気がつかない内に肥大化するものです。HDにあまり余裕が無い場合、ログを取得する種類を選別するのは有効な手段といえます。特に画像へのアクセスログは取得してもあまり意味がありません。その場合、LogFormatを指定している行の下あたりに
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" object-is-image
と指定し、
CustomLog /var/log/httpd/access_log common env=!object-is-image
と指定することにより、画像取得ログを省略することができます。
CGIエラー専用のログを記録したい |
CGIのテスト環境のためにApacheをインストールしている方も多いと思います。実はApacheにはCGIエラーのエラーを記録する専用のログファイルを生成することが可能です。この場合ScriptLog指示子を使います。
ScriptLog /var/log/httpd/cgi_log
ScriptLogLength 10000000
ScriptLogBuffer 1024
CGIデバッグ時にはかなり有用ですが、CGIエラーを定常的に記録することはサーバーのパフォーマンスを大幅に低下させますので、この指定はあくまでもデバッグ専用と考えてください。
DocumentRoot以外の場所も表示できるようににしたい |
DocumentRoot以外の場所を表示するには通常UserDir指示子を使いますが、もう1つの手段としてAlias(別名)があります。
Alias /drawing/ "/mnt/hdb/drawing/"
<Directory "/mnt/hdb/drawing">
AllowOverride AuthConfig Limit
Options None
Order allow,deny
Allow from all
</Directory>
上記は増設した別のドライブの中のdrawingというディレクトリをhttp://foo.bar.com/drawing/で表示可能にします。
クッキーを使ってユーザーを追跡したい |
Apacheでクッキー機能を有効にするにはmod_usertrackモジュールを使います。これはデフォルトでは無効になっていますので
LoadModule usertrack_module modules/mod_usertrack.so
AddModule mod_usertrack.c
のコメントを解除します。httpd.confの適当な場所に
CookieTracking on
CookieExpires "3 weeks"
のように指定します。CookieExpiresはクッキーの有効期限で、この値にはyear(年)、month(月)、weeks(週)、hours(時間)、minutes(分)、seconds(秒)を指定することができます。
サービス不能攻撃を防ぎたい |
Webサーバーを機能停止に追い込む攻撃の1つに、サービス不能攻撃というものがありますが、これはサーバーへのリクエストの中に大量のデータを入れるというものです。これを防ぐためにApacheには
LimitRequestBody | HTTPリクエストのメッセージ本体のサイズを制限する | |
LimitRequestLine | リクエストの第1行目のサイズを制限する | |
LimitRequestFields | リクエストに含まれるヘッダ行の行数を制限する | |
LimitRequestFieldsize | HTTPリクエストのヘッダフィールドのサイズがサーバーのコンパイル時に決定される通常の入力バッファサイズを下回るように制限する | |
LimitRequestLine | クライアントからのHTTPリクエスト行の長さを制限する |
の各指示子が用意されています。しかしながら、Webサーバーはさまざまなユーザーが利用するため、一概にサイズ制限を行うことは困難です。そういった理由から推奨する適正値というものは存在しません。
最近流行りのWebDAVを使いたい |
IE(Internet Explorer)5から標準で搭載されたWebフォルダ機能ですが、またまだ発展途上とはいえ今後の利用は増加していくことは間違いないでしょう。ApacheでWebDAVを有効にするにはmod_davモジュールを利用します。Red Hat Linuxなどに搭載されている新しいバージョンのApacheなら標準でmod_davが使えるようになっています。これを利用可能にするには
LoadModule dav_module modules/libdav.so
AddModule mod_dav.c
のコメントを解除します。httpd.confの適当な場所に
DAVLockDB /var/lock/apache/DAVLock
DAVMinTimeout 600
Alias /pub /mnt/hdb/davpub
<Location /pub>
DAV On
AllowOverride None
Options None
</Location>
と指定します。またディレクトリへのアクセスを認証制にしたい場合は
<Location /dav>
DAV On
AllowOverride None
Options None
AuthType Basic
AuthName "WebDAV Access"
AuthUserFile /mnt/hdb/etc/.davpasswd
AuthGroupFile /mnt/hdb/etc/.davgroup
<Limit DELETE PROPFIND PROPPATCH MKCOL COPY MOVE PUT LOCK UNLOCK>
Require valid-user
</Limit>
</Location>
のように指定します。尚、Lock用ディレクトリであるDAVLockはあらかじめ作成しておく必要があります。また、ディレクトリはApacheで指定したUserとGroupの権限で動作します。
WebDAVで日本語が扱えるようにしたい |
mod_encodingモジュールを利用します。Red Hat Linuxなどに搭載されている新しいバージョンのApacheなら標準でmod_encodingが使えるようになっています。これを利用可能にするには
LoadModule encoding_module modules/mod_encoding.so
AddModule mod_encoding.c
のコメントを解除します。httpd.confの適当な場所に
<IfModule mod_encoding.c>
EncodingEngine on
SetServerEncoding UTF-8
AddClientEncoding SJIS "Microsoft .* DAV"
AddClientEncoding UTF-8 "Microsoft-WebDAV-MiniRedir/"
AddClientEncoding SJIS "Microsoft .* DAV 1\.1$"
AddClientEncoding UTF-8 "Microsoft .* DAV$"
AddClientEncoding SJIS "xdwin9x/"
AddClientEncoding EUC-JP "cadaver/"
</IfModule>
と指定します。
Windows版でApacheメモリ消費量を確認したい |
タスクマネージャーで確認できます。「スタート」-「ファイル名を指定して実行」で名前欄に「taskmgr.exe」と入力して「OK」ボタンを押すとタスクマネージャーが起動しますので、「プロセス」タブをアクティブにしApache.exeというイメージ名で起動しているデーモンプロセスのメモリ使用量を合計します。
Windows 2000/XPでApacheのユーザーIDを変更したい |
コントロールパネルから管理ツールのサービスアプレットを開きます。サービス一覧からApacheを選択し、ログオンタブをアクティブにします。アカウントのテキストボックスに変更したいユーザー名(ID)を入力してOKを押し、Apacheを再起動します。
Windows版Apacheでmod_perlを使いたい |
Windows版Apacheでmod_perlを使うにはWindows版mod_perlをダウンロードしてインストールする必要があります。
http://cpan.perl.org/modules/by-authors/id/JBAKER/ からmod_perl-1.16-bin-bindist1-i386-win32-vc5.zipをダウンロードし、ZIPアーカイブを適当な場所で展開します。mod_perl-1.16-bin\perl\site\5.00502\lib\ツリーをPerlの最上位ディレクトリ(C:\Perlなど)に移動します。apache\modules\ApacheModulePerl.dllをApacheのmoduleディレクトリに移動します。さらにhttpd.confに
LoadModule perl_module modules/ApacheModulePerl
と追加します。変更を保存してApacheを再起動するとmod_perlが有効になります。
Windows版Apacheを再インストールしたい |
Windows版Apacheをインストーラーの指示通りデフォルトディレクトリにインストールしている場合は再インストール、バージョンアップインストールに関わらずそのまま上書きインストールしても問題はありません。(現バージョンのアンインストールの必要性はありません)ただ、httpd.conf.default、srm.conf.default、access.conf.defaultの3つのファイルが新規に作成されます。バージョンアップの場合は現在よりも拡張された設定内容が含まれている場合がありますで、以前の設定ファイルと比較して何が変わっているかを確認し、これまでの設定をこれらの新規ファイルに組み込む必要があります。
CopyRight (C) 2000-2013 by T.Shiraishi All right reserved 無断転載禁止/リンクフリー |