Apache Webサーバー_________ |
UNIX版Apacheの設定ファイル |
その高速性、安定性が高く評価され、市場使用率も非常に高いこのApacheですが、やはりUNIX環境で使用してこそその真価が発揮されることは云うまでもありません。ここでは安全かつ高速運用のための設定ファイル(httpd.conf)のサンプルを見ながら各設定項目を見ていきましょう。赤文字部分がオリジナルからの修正箇所となります。
## ServerType standalone サーバーの動作方法を指定する。standaloneは80番ポートなどの単独モードでデーモンとして常駐した状態で動作することを意味する。UNIXではもう1つinetdという動作方法も指定できるが、これは要求があるとそれに対応するポートでのサーバープロセスを開始し、要求が満たされるとプロセスを終了する。しかし、こちらは非常に効率が悪く今後はサポートされないとドキュメントにも明記されている。 ServerRoot "/usr/local/apache" Apacheが必要とする設定ファイル(httpd.conf、access.conf、srm.conf等)の場所を示す。インストール時に別の場所を指定しない限り自動設定される。 LockFile /usr/local/apache/logs/httpd.lock ロックファイルの場所を示す。 PidFile /usr/local/apache/logs/httpd.pid プロセス識別ファイルの場所を示す。 ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard Apacheのstatus(稼動状況)を記入するファイルの場所を示す。 #ResourceConfig conf/srm.conf 現バージョンのApacheでは上の2つのファイルは使用しない。httpd.confで全てを制御する。 Timeout 300 クライアントとの間でデータパケットをやり取りする際に待機する最長の時間を秒単位で設定する。接続が頻繁に中断するなら値を増やすが、それ以外はデフォルトのままで十分である。 KeepAlive On Webブラウザとの間で持続的な接続を維持するかどうかを指定する。Onに設定するとサーバーのオーバーヘッドが減り、パフォーマンスが向上する。 MaxKeepAliveRequests 200 1回の接続で処理できる要求の数を指定する。可能な限り大きな値を指定しておく。但し、KeepAliveをOnにしていないと無効。 KeepAliveTimeout 15 1つの要求が完了してから、接続を中断せずに次の新しい要求を待つ時間を秒単位で指定する。 MinSpareServers 5 StartServers 5 起動時に作成される子サーバーの数や、最小、最大の子サーバーの数を指定する。以前はこの設定がパフォーマンスに大きく影響したが、現バージョンのApacheではプロセスの生成のタイミング等が最適化されているため、特に理由がない限り変更の必要はない。 MaxClients 150 同時に受け付けることができるクライアントの数を設定する。上限は256まで指定可能であるが、特に理由がない限りこのままでよい。 MaxRequestsPerChild 0 StartServer項目と同様、特に理由がない限り変更の必要はない。0は無制限であることを意味する。 #Listen 3000 デフォルトの80番ポート以外のポートでリクエストを受け取るように設定する際に指定する。 #BindAddress * 仮想ホストを指定した場合にそれぞれのサーバーに異なるIPアドレスを指定する際に利用する。 # # LoadModule foo_module libexec/mod_foo.so DSOモードで読み込むモジュールを指定する。ただし、必要な機能はDSOモードにはせず、Apacheに組み込んでしまったほうが効率が良い。詳細はソースコードからインストールを参照。 #ExtendedStatus On mod_status.soモジュールを有効にしてApacheの稼動状況を確認する際、Onを指定すると詳細情報が取得できる。Offだと簡易版になる。 ### Section 2: 'Main' server configuration Port 80 HTTPの標準ポート80番を指定する。特に理由がない限りこのままで使用する。これ以外のポートを指定した場合、例えば8080番などを指定するとアクセスする際には「http://foo.bar.com : 8080/index.html」と指定する必要がある。 User apache デフォルトのユーザー指定はnobodyとなっているが、ここではapacheという低い権限の専用のユーザー、グループを作成した上で動作させる。間違ってもrootなどと指定してはいけない。 ServerAdmin root@localhost サーバー管理者のメールアドレスを記入する。これは接続に何らかの問題が生じたときに表示されるエラーメッセージ中に表示される。 ServerName foo.bar.com インターネットサーバーホスト名を指定する。ここに指定するものは、DNS(ドメインネームサーバー)に登録されている必要がある。 DocumentRoot "/usr/local/apache/htdocs" 公開する文書が置かれている場所やURLをファイル名に変換する方法を指定する。インストール時に自動設定される。余談だが、このディレクトリにはMultiViews用の多国語ファイル等、不要なファイルがインストールされるので、すべて削除しておく。 <Directory /> サーバールートディレクトリの指定。安全のため、すべてのオプションを無効しに、すべてのファイルへのアクセスを拒否する。 <Directory "/usr/local/apache/htdocs"> ドキュメントルートディレクトリーの指定。ここではディレクトリインデックスファイルの表示を無効にし、さらにSymLinksIfOwnerMatchと修正し、オーナーのみシンボリックリンクがたどれるように変更する。また、多言語ファイルを作成利用しないならMultiVewsも必要ない。 UserDir public_html → UserDir
/home/*/public_htmlまたは/var/www/*/public_htmlでもよい。余談だが、ユーザーホームディレクトリ作成の際の効率化を図るため、Linuxでは/etc/skelにあらかじめ雛形を作成しておくと良い。mkdirコマンドでpublic_html(パーミッション755)を作成しておくと、新規ユーザー作成時に自動的にpublic_htmlが作成されて便利である。尚、suEXECを有効にしてapacheとは異なる各ユーザーの権限でCGIプログラムを動作させたい場合は/home/*/public_htmlと指定する。 ユーザーディレクトリを指定する。ここでもサーバー速度向上のためディレクトリインデックスファイルの表示を無効にし、さらにSSIの使用を無効にしている。また、LimitExceptでGETとPOST以外からの要求を拒否する。 <IfModule mod_dir.c> ファイル名を何も指定せずにアクセスした際に表示させるファイル名及び優先順位を指定する。http://foo.bar.com/とだけ指定した場合、そのディレクトリ内にindex.html、index.htmという2つのファイルがあれば、index.htmlのほうが表示される。index.htmlとindex.htmの2つを指定しておくとよい。 AccessFileName .htaccess アクセス制御ファイルの名前を指定する。デフォルトは「.htaccess」。が、高速Apache実現のためには使用しないほうが良いことは云うまでもない。.htaccessを使用しないなら上記のAllowOverrideの引数はNoneとする。逆に使用するにはAllと指定する。また個別に設定することも可能で、AddType、AddEncoding、AddLanguageの上書きを許可するにはFileInfoを、FancyIndexing、AddIcon、AddDescriptionの上書きを許可するにはIndexesを、ホスト名またはIPアドレスを用いたアクセス制限の上書きを許可するにはLimitを、パスワードによる認証を許可するにはAuthConfigを指定する。また、それらを複数で組み合わせることも可能である。 <Files ~ "^\.ht"> デフォルトで、上記.htaccessファイルが表示されてしまう(ブラウザのURL欄にhttp://foo.bar.com/.htaccessなどと直接入力された場合)のを防ぐための処置がなされている。 #CacheNegotiatedDocs コンテンツネゴシエーション(クライアントから送られてきた情報に基づいてサーバーが適切なコンテンツを返すこと)の結果返したドキュメントをキャッシュするかどうかを指定する。 UseCanonicalName On リクエストされたサーバ名とポートを検索するときにサーバー参照名(SERVER_NAME)などに別名を使えるようにする。 <IfModule mod_mime.c> ディレクトリに含まれているファイルのデフォルトのMIMEタイプを指定する。 <IfModule mod_mime_magic.c> MIMEモジュールが提供するMIMEタイプを指定したファイルのパスを指定する。 HostnameLookups Off IPアドレスに対応するホスト名を調べるためにDNSを参照するかどうかを設定する。OnにするとDNSの二度引きが行われるため、サーバーの応答速度が大幅に遅くなる。必ずOffを指定し、CGIプログラムなどで必要がある場合にはPerlのgethostbyaddr関数で個別に取得するようにする。 ErrorLog /usr/local/apache/logs/error_log エラーのあったリクエストを記録するエラーログファイルのパスとレベルを指定する。デフォルトで十分である。 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" combined #CustomLog /usr/local/apache/logs/access_log combined サーバーへのリクエストを記録するアクセスログのパスを指定する。CustomLogの引数とすることでカスタムのログ形式を指定できる。アクセスログ容量の肥大化を防ぐため、gifなどの画像ファイルに対してはログを記録しない設定にしてある。(上記では、GIF、JPG、PNG画像に対してログを記録しない) ServerSignature Off サーバーが自動生成するページにApacheのバージョンと仮想ホストの名前を表示することを指定する。デフォルトはOnだが、バナー表示は無用のため、Offを指定する。また、以下の指定によりHTTPレスポンスヘッダからApacheのバージョンを消しておくとセキュリティーが向上する。これは「GET / HTTP/1.1」と指定してHTTPサーバーの種類やApacheのバージョンを検索する攻撃に対して有効である。 ServerTokens ProductOnly <IfModule mod_alias.c> #Alias /icons/
"/usr/local/apache/icons/" Apacheで使用するアイコン画像の場所を指定する。ここではディレクトリインデックスファイルを生成しないので無効化しておく。該当ページが見つからない時にそのディレクトリ中の全ファイルへの案内をアイコンとともに生成するこのディレクトリインデックスファイルであるが、セキュリティーの面からも使用しないのが好ましい。使用してない場合、要求に対しては403を返す。 #ScriptAlias
/cgi-bin/ "/usr/local/apache/cgi-bin/" CGIプログラム実行のデフォルトの指定であるが、多数のユーザーを抱えるなら下記のようにユーザーディレクトリ配下で指定しておく。CGIプログラムの設置は必ず指定場所でしか行えないようにしておくのが大原則である。 Alias /cgi-bin/ "/home/*/public_html/cgi-bin/" <Directory "/home/*/public_html/cgi-bin/"> </IfModule> #IndexOptions FancyIndexing Apacheで使用するアイコン画像の種類を指定する。ここではディレクトリインデックスファイルを生成しないのですべて無効化しておく。 # ファイルタイプに応じてファイルの説明を付けるように設定する。特に説明を付ける必要もないため、デフォルトのままにしておく。 # ReadmeNameでディレクトリインデックスファイル下部に標準で表示されるべきREADMEファイルの名前を指定し、HeaderNameで上部に付加したいファイルの名前を指定する。 IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t ディレクトリインデックスファイル表示時にリストへ含めないファイルの名前を指定する。ワイルドカードでの指定が可能。 </IfModule> <IfModule mod_mime.c> AddEncoding x-compress Z ファイルがエンコードされていることを示す拡張子をApacheに指定する。 AddLanguage en .en サーバーに登録されている特定のコンテンツ言語や文字セットに対応するファイル名拡張子を割り当てる。デフォルトのままで特に問題はない。 <IfModule mod_negotiation.c> MultiViewsが指定されているときにサーバーが優先して使う言語を指定する。 </IfModule> AddType application/x-tar .tgz AddTypeにより、新しいファイルタイプをMIMEに追加する。デフォルトではtgz、icoが指定されている。 AddHandler cgi-script .cgi この指定により、CGIスクリプトは拡張子.cgiのものだけが実行されるようになる。 #AddType text/html .shtml セキュリティー、サーバーパフォーマンスのためにSSIを使用できないようにコメントアウト。 #AddHandler send-as-is asis #AddHandler imap-file map サーバーサイドイメージマップは使用しないのでコメントアウト。 </IfModule> #MetaDir .web メタ情報が含まれているファイルのファイル名拡張子を指定する。特に必要はない。 # Customizable error response (Apache style)# these come in three flavors # # 1) plain text #ErrorDocument 500 "The server made a boo boo. # n.b. the (") marks it as text, it does not get output # # 2) local redirects ErrorDocument 404 /missing.html # to redirect to local URL /missing.html #ErrorDocument 404 /cgi-bin/missing_handler.pl # N.B.: You can redirect to a script or a document using server-side-includes. # # 3) external redirects #ErrorDocument 402 http://some.other_server.com/subscription_info.html # N.B.: Many of the environment variables associated with the original # request will *not* be available to such a script. カスタムのエラードキュメントを指定する。404NotFound(エラー)ドキュメントくらいは自前で作成したほうがいいような気がするのは云うまでもない。 <IfModule mod_setenvif.c> BrowserMatch "Mozilla/2" nokeepalive BrowserMatchでは、指定した正規表現にマッチするパターンを持つ環境変数を設定する。 </IfModule> #<Location /server-status> サーバー管理者が遠隔地からサーバーのステータス状態(動作状態)を確認したい場合に設定するが、その場合にはAllowを自分だけにしておくことが大切。 #<Location /server-info> サーバー管理者が遠隔地からサーバーの各設定状態を確認したい場合に設定するが、その場合にはAllowを自分だけにしておくことが大切。 # Allow access to local system documentation from localhost ローカルユーザーがローカルのディレクトリを参照できるようにするための指定であるが、このような項目は設定ミスを防ぐためにも削除しておいたほうがよい。 #<Location /cgi-bin/phf*> 古いApacheのセキュリティーホールに対してアタックしてきた人がいた場合に、リポートする。現バージョンのApacheには全く無縁。 #<IfModule mod_proxy.c> Apacheをプロキシサーバーとして動作させるか否かの設定を行う。動作させるならOnを指定する。プロキシを不特定多数のユーザーに利用可能とするのは荒らしなどの踏み台にされる可能性も否めないため、Allowに許可するユーザーやドメインを指定しておくことが肝要である。意味のないプロキシサーバーの開放のために迷惑を被っているサイトは数多い。 #ProxyVia On プロキシ固有環境変数「HTTP_VIA」を操作する。Offなら何も操作されない。Onを指定した場合すべてのリクエストと応答にVIAヘッダが付加され、Fullにした場合にはそれに加えてプロキシのバージョンが表示される。VIAヘッダを取り除きたいときにはBlockを指定する。 #CacheRoot "/var/cache/httpd" プロキシのキャッシュを制御する。各指示子の詳細についてはApacheのモジュール一覧を参照。 ### Section 3: Virtual Hosts バーチャル(仮想)ホストの指定を行う。 #<VirtualHost ip.address.of.host.some_domain.com> バーチャルホストもApacheの速度低下の要因となるためできれば使用しないほうが良いことは云うまでもない。どうしても使用する場合にはDNSを参照しなくて済むIPベースでの使用をお勧めする。ただし、HTTP1.1をサポートしているApache1.3.x以上でないと利用できない。 UNIX版 Apache1.3.27参照 |
CopyRight (C) 2000-2013 by T.Shiraishi All right reserved 無断転載禁止/リンクフリー |