このページではLinux上でApache/httpdを使ってWebサーバー構築するために必要なドキュメントルートの設定について解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
Webサーバーの構築

Webサーバーについて

Apacheの構成と設定の準備

全般的な動作環境の設定

コンテナディレクティブの形式

コンテナディレクティブの設定

ドキュメントルートの設定等

ユーザーディレクトリの設定

バーチャルホストの設定

CGIの実行許可の設定

ユーザー認証機能の設定

httpdのコントロール

httpdの動作チェック

ポートフォワーディングの設定


ドキュメントルートの設定等

WBEL CentOS httpd では、 デフォルト ドキュメントルート (平たく言えば HTML ファイルなどの置き場)として "/var/www/html/" が準備されています。

本当のところをいえば、httpdの設定対象範囲は LinuxOS のファイルシステム全体に及び、設定さえ行えば自分の好きなディレクトリを外部に公開することが可能ですから、必ずしもドキュメントルートを "/var/www/html/" にしなければならないわけではありません。

しかしながら、 RHEL 及びその クローン OS の利用を前提とした Apache の解説書の多くは "/var/www/html/" をドキュメントルートとして書かれていますし、 サーバーサイドアプリケーション の中には "/var/www/html/" がドキュメントルートであることを前提としてパッケージ化されているものもありますから、慣れないうちはデフォルト設定に従って構築を行うほうがベターです。

このパートではhttpdの主設定ファイル "/etc/httpd/conf/httpd.conf" の中の、 "/(ルート)" ディレクトリに関する設定と、デフォルトのドキュメントルート "/var/www/html/" とそれに関連するディレクトリのコンテナ ディレクティブ の設定について説明します。

更に細かい個々のディレクティブの具体的な内容については、 コンテナ式ディレクティブの設定 を参照してください。

"/(ルートディレクトリ)"の設定

WBEL3 及び CentOS3 では 292行目〜 、WBEL4及びCentOS4では 275行目〜 、CentOS5では 291行目〜 あたりに記述があります。

構築中のLinuxサーバー のファイルシステムの最上位に対する設定です。

httpd は、それが HTTP には全く関与しないものであっても、 OS 上のすべてのディレクトリとファイルに対してアクセスに関する設定を行う必要があります。

実際にhttpdが コンテンツ データとして クライアント に送信するものはファイルシステム全体のごく一部に過ぎませんから、コンテンツに関与しないその他のディレクトリやファイルに対しては「必要最低限の設定」を施しておきます。

httpdのディレクトリ式コンテナの設定は、ディレクトリ構造の上位から順に適用されていきますので、最上位である "/(ルート)" ディレクトリに対してこの「必要最低限の設定」を行っておけばまず安心というわけです。

デフォルト の設定は、

<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

ですから、単純に解釈すると、

シンボリックリンク への参照を許可し、アクセスファイルの参照を禁止する。」

となりそうですが、実は "Order" ディレクティブ Orderディレクティブについて が記述されていませんので、"Order"ディレクティブのデフォルトの値が設定されているものとみなされますから、現実には、

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Order Deny,Allow
</Directory>

と記述されていると解釈する必要があります。

例えばこの設定の影響で、運用するつもりのないWebメール アプリケーション である SquirrelMail SquirrelMailについて も自動的に有効になっていしまいます。
もちろん、セキュリティ的には問題ありです。

ですから正しくは、

「シンボリックリンクへの参照を許可し、アクセスファイルの参照を禁止し、すべての ノード からのHTTPアクセスを許可する。」

と設定されていることになります。

ところで、これはいうまでもなくファイルシステムの最上位のディレクトリの設定です。

従ってこれが 下位のディレクトリに対して明示的に設定が行われない場合のデフォルト値として用いられる という点に注意してください。

従って、 セキュリティ を考慮すれば、この設定は好ましいものではありません。ここは、

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Order Deny,Allow
  Deny from all
</Directory>

と、 明示的にHTTPによるアクセスを禁止してください

実際にはドキュメントルートとして指定されたディレクトリ以外は、クライアントから直接 URL で参照することはできませんから、HTTPによるアクセスが許可されているだけで、それが直接セキュリティホールになるというわけではありません。

しかし、ここでとりあえず「すべてのファイルシステムに対してHTTPアクセスを拒否」という設定を施しておけば、「想定外のディレクトリを間違えてHTTP配信してしまう」というミスはずっと少なくなります。

"/var/www/html(ドキュメントルート)"の設定

WBEL3 及び CentOS3 では 307行目〜 、WBEL4及びCentOS4では 290行目〜 、CentOS5では 306行目〜 あたりに記述があります。

"DocumentRoot" ディレクティブ DocumentRootディレクティブについて で、メイン コンテンツ スペースとして指定したディレクトリに対する設定です。

通常の運用では、ここがHTTPで配信される最上位のディレクトリとなりますから、一般的には セキュリティ を高めに設定し、動作負荷の高い設定はできるだけ避けるようにします。

デフォルト 設定の記述部分には、行間にコメント文が挿入されています。

<Directory /var/www/html>

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
  Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#  Options FileInfo AuthConfig Limit
#
  AllowOverride None

#
# Controls who can get stuff from this server.
#
  Order allow,deny
  Allow from all

</Directory>

コメントの部分を省略すると、次のようになります。

<Directory /var/www/html>
  Options Indexes FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

すなわち、

「ディレクトリ構造の表示と シンボリックリンク への参照を許可し、アクセスファイルの参照を禁止し、すべての ノード からのHTTPアクセスを許可する。」

と設定されていることになります。

もしもディレクトリ構造の表示が必要でなければ、 "Options" ディレクティブから "Indexes" オプションを削除してください OptionsディレクティブのIndexesオプションについて

SSI CGI の実行許可をドキュメントルート全域で許可したい場合は、"Options"ディレクティブに、 "Include" オプション OptionsディレクティブのIncludesオプションについて "ExecCGI" オプション OptionsディレクティブのExecCGIオプションについて をそれぞれ追加記述してください。

ただ、ドキュメントルートの中のどこででもこういった サーバーサイドアプリケーション の実行許可を与えることは、セキュリティ面を考えるとあまり勧められるものではありません。

できれば、それらの実行プログラムは一ヶ所のディレクトリにまとめて、そのディレクトリにのみ実行を許可するように設定すべきです。

"AllowOverride" ディレクティブ AllowOverrideディレクティブについて は、誰か別の人にドキュメントルートをまるごと貸し出し、更にディレクトリの制御を全部任せてしまうような非常に特殊(乱暴?)なケースを除いて、変更する必要はありません。

"Order" "Deny" Alow" の各ディレクティブの設定は、コンテンツをすべてに公開するのが目的であればそのままでOKです。

稀なケースかも知れませんが、ドキュメントルートを他の目的で運用し、特別な設定を行う場合には、 Orderディレクティブの定番設定について を参考に適宜設定を修正してください。

ごく一般的なお勧めの設定は、以下のとおりです。

<Directory /var/www/html>
  Options FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

この <Directory /var/www/html> の設定が、以降の設定の基準ともいうべき設定になります。

".ht"で始まるファイルの設定

WBEL3 及び CentOS3 では 405行目〜 、WBEL4及びCentOS4では 388行目〜 、CentOS5では 404行目〜 あたりに記述があります。

"AllowOverride" ディレクティブ AllowOverrideディレクティブについて で、 "None" オプション以外の設定を行う場合、 httpd の設定の一部を、 HTTP で閲覧可能な コンテンツ スペースの中に アクセスファイル という形で配置することになります。

ということは、例えば、 "/var/www/html/member" 以下にアクセスファイル ".htaccess" を配置したとすると、その内容は クライアント から、

"http://www.obenri.com/member/.htaccess"

で閲覧できる可能性があることを意味しています。

一般にアクセスファイルは、自分以外の第三者にhttpdの設定の一部を任せるためのものですが、その人が自分の管理する".htaccess"にきちんとアクセス制限をかけてくれるという保障はどこにもありません。

そのため"/etc/httpd/conf/httpd.conf"には デフォルト で、

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files>

という設定があります。この設定の意味は、

「".ht"で始まるファイルのHTTPによるアクセスを全て拒否する。」

です。設定対象が 正規表現 になっていますが、これは ワイルドカード ".ht*" と同じ意味になります。

"AccessFileName" ディレクティブ AccessFileNameディレクティブについて でアクセスファイルを デフォルト ".htaccess" または ".ht" で始まるファイル名に指定している場合、この設定が有効に働くようになります。

この設定があれば、 構築中のLinuxサーバー のファイルシステム全域で、".ht"で始まるファイルすべてにHTTPでのアクセスができなくなりますから、セキュリティについて理解の浅いコンテンツ作成者にも安心してアクセスファイルの運用を任せられる、というわけです。

設定を修正する必要は特にありません。

サーバーからのレポートディレクトリ

WBEL3 及び CentOS3 では 539,553,897行目 、WBEL4及びCentOS4では 521,875行目 、CentOS5では 539,837行目 あたりに記述があります。

既存の "Alias" ディレクティブ Aliasディレクティブの設定について に対応する、アイコン、マニュアル、エラーの各ページのコンテンツデータの収容ディレクトリに対する設定です。

各々の デフォルト の設定を、対応する"Alias"ディレクティブとともに以下に示します。

WBEL4及びCentOS4では、 "/manual" に関する記述は "/etc/httpd/conf.d/
manual.conf"
にあります。
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Alias /manual "/var/www/manual"

<Directory "/var/www/manual">
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Alias /error/ "/var/www/error/"

<IfModule mod_negotiation.c">
<IfModule mod_include.c">
<Directory "/var/www/error">
  AllowOverride None
  Options IncludesNoExec
  AddOutputFilter Includes html
  AddHandler type-map var
  Order allow,deny
  Allow from all
  LanguagePriority en es de fr
  ForceLanguagePriority Prefer Fallback
</Directory>
</IfModuley>
</IfModuley>

これら"Alias"ディレクティブによって指定されたディレクトリは、ドキュメントルート以下の階層ではありませんから、このようにそれぞれのディレクトリに明示的に各ディレクティブを設定する必要があります。

個々のディレクティブに関する説明は割愛しますが、これらはいずれもhttpdが自分自身で使用するものですので、設定を修正する必要はありません。

このページの先頭へ↑

とりあえず設定完了

この段階まで設定が終われば、 FTPクライアント でドキュメントルート "/var/www/html" コンテンツデータ を送り込むことで、問題なく Webサーバー として httpd を稼動させることができるはずです。

これ以上の機能が必要なければ、httpdの設定はこれで終了です。httpdの実際の操作を行う httpdのコントロール のステップへ進んでください。

もしも、 "http://www.obenri.com/" 以下に、自分以外のローカルユーザーに対してコンテンツスペースを貸し出すスタイルの運用をする場合は、ユーザーディレクトリの設定 ユーザーディレクトリの設定 のステップへ進んでください。

"http://www.obenri.com/" 以外の URL を利用して、別のコンテンツを同時に配信する場合は バーチャルホスト の設定 バーチャルホストの設定 のステップへ進んでください。

CGI を利用して動的なコンテンツを作成したい方は「CGIの実行許可の設定」 CGIの実行許可の設定 へ進んでください。

コンテンツの任意のディレクトリに、ユーザー認証による ログイン 制限を行う場合には「ユーザー認証機能の設定」 ユーザー認証機能の設定 へ進んでください。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。