From aed16e9114f537eabfce3508921def448b81782c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Malo?= Date: Wed, 16 Apr 2003 00:36:15 +0000 Subject: [PATCH] obtained from 2.0 branch (do not differ) git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@99379 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/sections.html.ja.jis | 541 ++++++++++++++++++++++++------- docs/manual/sections.xml.ja | 458 ++++++++++++++++++++++++++ docs/manual/sections.xml.meta | 2 +- 3 files changed, 880 insertions(+), 121 deletions(-) create mode 100644 docs/manual/sections.xml.ja diff --git a/docs/manual/sections.html.ja.jis b/docs/manual/sections.html.ja.jis index a6d73cc71e..3d5b4f3fe1 100644 --- a/docs/manual/sections.html.ja.jis +++ b/docs/manual/sections.html.ja.jis @@ -1,151 +1,452 @@ - - - - - How Directory, Location and Files sections work - - - - - - - -

Directory, Location, Files - セクションの動作方法

- -

セクション <Directory>, - <Location>, <Files> - には、それぞれ指定されたディレクトリ、URL, - ファイルにのみ適用されるディレクティブを書くことができます。 - また、ディレクトリにディレクティブを適用するためにディレクトリ中に - .htaccess ファイルを使用することもできます。このドキュメントは - これらのセクションの違いを説明し、それらと、ディレクトリや - リクエストされた URL に Apache がどのディレクティブを - 適用するかを決定する方法との関係を説明します。

- -

セクション中に許可されているディレクティブ

- -

構文上 <Directory> - に書けるものはすべて <Location> - にも書くことができます (<Files> - セクションは例外です)。しかし、中には - AllowOverrideFollowSymLinks - と SymLinksIfOwnerMatch - という二つのオプションのように、<Location>, - <LocationMatch>, - <DirectoryMatch> 中では意味のないものもあります。 - 同様のことが <Files> - にも言えます。構文的にはすべて大丈夫ですが、 - 意味的にはそうでないものもあります。

- -

セクションのマージ方法

+ + +セクションの設定 - Apache HTTP サーバ + + + + + +
<-
+
+Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.1

セクションの設定

設定ファイル中のディレクティブは +サーバ全体に適用されたり、特定のディレクトリやファイル、ホスト、URL にのみ +適用されるように制限したりすることができます。この文書は設定用のセクションの +コンテナや .htaccess ファイルを使って他の設定ディレクティブの +スコープを変更する方法を説明します。

+
+ +
top
+
+

設定用セクションコンテナの種類

+ + + +

コンテナには二つの基本となる種類があります。ほとんどのコンテナは +各リクエストに対して評価されます。その場合、コンテナ中のディレクティブは +コンテナにマッチするリクエストにのみ適用されます。 +一方、<IfDefine> コンテナと <IfModule> コンテナは +サーバの起動時と再起動時にのみ評価されます。起動時に条件が真であれば、 +コンテナ中のディレクティブはすべてのリクエストに適用されます。条件が +偽であれば、コンテナ中のディレクティブは無視されます。

+ +

<IfDefine> ディレクティブは +httpd コマンドラインで適切なパラメータが定義されたときにのみ +適用されるディレクティブを囲います。例えば次の設定では、サーバが +httpd -DClosedForNow を使って起動されたときだけすべての +リクエストを別のサイトにリダイレクトします:

+ +

+<IfDefine ClosedForNow>
+Redirect / http://otherserver.example.com/
+</IfDefine> +

+ +

<IfModule> は +非常に似ていますが、代わりにサーバ上でモジュールが使用可能な場合にのみ +適用可能なディレクティブを囲います。モジュールはサーバに +静的に組み込まれているか、動的に組み込むようになっていて、設定ファイル中で +LoadModule の行がより前の +部分に書かれている必要があります。このディレクティブは特定のモジュールの +存在に関わらず設定ファイルが動作する必要がある場合にのみ使ってください。 +常に動作して欲しいディレクティブを囲むために使うべきではありません。 +存在しないモジュールに関する有用なエラーメッセージの発生を抑制してしまいますので。 +

+ +

次の例では、mod_mime_magic があるときにのみ MimeMagicFiles ディレクティブが +適用されます。

+ +

+<IfModule mod_mime_magic.c>
+MimeMagicFile conf/magic
+</IfModule> +

+ +

<IfDefine> ディレクティブと +<IfModule> ディレクティブは +テストの前に "!" を付けることで否定の条件を適用することができます。 +また、これらのセクションはより複雑な制限を課すために入れ子にすることができます。 +

+
top
+
+

ファイルシステムとウェブ空間

+ +

最もよく使われる設定のセクションコンテナはファイルシステムやウェブ空間の +特定の場所の設定を変更するものです。まず、この二つの違いを理解することが +大切です。ファイルシステムはオペレーティングシステムから見たディスクの内容です。 +たとえば、デフォルトのインストールでは Apache は Unix ファイルシステムでは +/usr/local/apache2 に、Windows ファイルシステムでは +"c:/Program Files/Apache Group/Apache2" に存在します。 +(Apache では Windows でもパスセパレータとしてスラッシュを使うことに +気をつけてください。) 対照的に、ウェブ空間はあなたのサイトを +ウェブサーバから配信されるものとして見たもので、クライアントに見えるものです。 +デフォルトの Unix 上の Apache のインストールではウェブ空間の +/dir/ というパスはファイルシステムの +/usr/local/apache2/htdocs/dir/ というパスに対応します。 +ウェブページはデータベースや他の場所から動的に生成することもできますので、 +ウェブ空間はファイルシステムに直接マップする必要はありません。

+ +

ファイルシステムコンテナ

+ +

<Directory> ディレクティブと +<Files> ディレクティブ、それと +それらの正規表現版はディレクティブをファイルシステムの一部分に対して適用します。 +<Directory> セクションの +中のディレクティブは指定されたディレクトリとそのすべてのサブディレクトリに +適用されます。.htaccess ファイルを +使うことでも同じ効果を得ることができます。例えば、次の設定では +/var/web/dir1 とすべてのサブディレクトリに対して +ディレクトリインデックスを行ないます。

+ +

+<Directory /var/web/dir1>
+Options +Indexes
+</Directory> +

+ +

<Files> セクションの +中にあるディレクティブはどのディレクトリにあるかに関わらず、指定された名前の +すべてのファイルに適用されます。ですから例えば以下の設定ディレクティブが +設定ファイルの主セクションに書かれたときには、すべての場所の +private.html という名前のファイルへのアクセスを拒否します。

+ +

+<Files private.html>
+Order allow,deny
+Deny from all
+</Files> +

+ +

ファイルシステムの特定の場所にあるファイルを指定するために、 +<Files> セクションと +<Directory> セクションを +組み合わせることができます。例えば、次の設定では +/var/web/dir1/private.html, +/var/web/dir1/subdir2/private.html, +/var/web/dir1/subdir3/private.html など、 +/var/web/dir1/ ディレクトリの下にあるすべての +private.html へのアクセスを拒否します。

+ +

+<Directory /var/web/dir1>
+<Files private.html>
+Order allow,deny
+Deny from all
+</Files>
+</Directory> +

+ + +

ウェブ空間コンテナ

+ +

一方、<Location> +ディレクティブとその正規表現版はウェブ空間上の内容に対して設定を変更します。 +たとえば、次の設定では /private で始まる URL パスへのアクセスを制限します。 +具体的には、 +http://yoursite.example.com/private, +http://yoursite.example.com/private123, +http://yoursite.example.com/private/dir/file.html +へのリクエストや、 +他の同様に /private 文字列で始まるリクエストに +適用されます。

+ +

+<Location /private>
+Order Allow,Deny
+Deny from all
+</Location> +

+ +

<Location> +ディレクティブはファイルシステムと関係ある必要が全くありません。 +たとえば次の例では、どのようにして特定の URL を +mod_statusで提供されている Apache +内部ハンドラにマップするかを示しています。ファイルシステムに +server-status というファイルが存在する必要はありません。

+ +

+<Location /server-status>
+SetHandler server-status
+</Location> +

+ + +

ワイルドカードと正規表現

+ +

<Directory>, +<Files>, +<Location> +ディレクティブでは、 C 標準ライブラリの fnmatch のように +shell スタイルのワイルドカードキャラクタが使用できます。 +"*" 文字は任意の文字列にマッチし、"?" 文字は任意の 1 文字にマッチし、 +"[seq]" は seq の任意の文字にマッチします。 +"/" 文字はどのワイルドカードでもマッチされません。 +明示的に指定する必要があります。

+ +

これより柔軟なマッチングが必要な場合は、これらのコンテナの正規表現 +(regex) 版である +<DirectoryMatch>, +<FilesMatch>, +<LocationMatch> +があり、マッチを選択するのに perl 互換正規表現を使用できます。しかし、次の設定のマージに目を通して、 +regex セクションを使用することで、ディレクティブの適用がどのように +変化するか把握しておいてください。

+ +

全ユーザディレクトリの設定を変更する、非 regex +ワイルドカードセクションは次のようになります。

+ +

+<Directory /home/*/public_html>
+Options Indexes
+</Directory> +

+ +

regex セクションを使用することで、画像ファイルの多くのタイプに対する +アクセスを一度に拒否できます。

+

+<FilesMatch \.(?i:gif|jpe?g|png)$>
+Order allow,deny
+Deny from all
+</FilesMatch> +

+ + + +

いつ何を使うか

+ +

ファイルシステムコンテナとウェブ空間コンテナを使い分けるのは、 +実際には非常に簡単です。ファイルシステムに依存する +オブジェクトにディレクティブを適応する場合は、必ず +<Directory> か +<Files> +を使用します。ファイルシステムに依存しないオブジェクト +(データベースから生成されるウェブページなど) +にディレクティブを適用する際には、 +<Location> +を使用します。

+ +

ファイルシステム上のオブジェクトへのアクセスを制限するために、 +<Location> +を決して使用ないようにしましょう。 +同一のファイルシステム位置にマップしている、ウェブ空間位置 (URL) +が多数あって、設定した制限を迂回されてしまうかもしれないからです。 +例えば次の設定を考えてみましょう。

+ +

+<Location /dir/>
+Order allow,deny
+Deny from all
+</Location> +

+ +

http://yoursite.example.com/dir/ +へのリクエストでは上手く動作します。しかし大文字小文字を区別しない +ファイルシステムを使っていたらどうなるでしょう? +http://yoursite.example.com/DIR/ +へのリクエストで簡単にアクセス制限を迂回されてしまいます。これに対して +<Directory> +ディレクティブを使用すると、どのように呼び出されたかに関わらず +その場所から提供される内容に適用されます。 +(例外はファイルシステムのリンクです。シンボリックリンクを使って、 +同一のディレクトリを複数のファイルシステムに設置できます。 +<Directory> +ディレクティブはパス名をリセットすることなくシンボリックリンクを +辿ります。ですから、高度なセキュリティが要求される場合は、 +適切に Options +ディレクティブを使用してシンボリックリンクを無効にするべきです。)

+ +

大文字小文字を区別するファイルシステムを使用しているから上記のことは +無関係だと思われるかもしれませんが、 +同一のファイルシステム位置に複数のウェブ空間位置をマップする方法は、 +他にいくらでもあるということを覚えていてください。 +ですからできる限りファイルシステムコンテナを使用してください。 +しかしながら一つだけ例外があります。 +<Location /> セクションはどんな URL +にも関わらず適用されるので、そこにアクセスを制限するディレクティブを +居れることは完全に安全です。

+ + +
top
+
+

バーチャルホスト

+ +

<VirtualHost> +コンテナは特定のホストに適用するディレクティブを格納します。 +一台のマシンで複数のホストを異なる設定で提供したいときに有用です。 +詳細に関してはバーチャルホストドキュメントを +ご覧下さい。

+
top
+
+

プロクシ

+ +

<Proxy> +と <ProxyMatch> +コンテナは、mod_proxy +プロクシサーバを経由してアクセスされる特定の URL にマッチするサイトに +対してのみ適用される +設定ディレクティブを格納します。例えば次の設定は、プロキシサーバが +cnn.com ウェブサイトをアクセスするためには使えないようにします。

+ +

+<Proxy http://cnn.com/*>
+Order allow,deny
+Deny from all
+</Proxy> +

+
top
+
+

どのディレクティブが使えるの?

+ +

どのタイプの設定セクションでどのディレクティブが使用できるかは、 +ディレクティブの Context +を見てください。 +<Directory> +で使用可能なものは全て、同様に +<DirectoryMatch>, +<Files>, +<FilesMatch>, +<Location>, +<LocationMatch>, +<Proxy>, +<ProxyMatch> +セクションで使用可能です。しかしながら幾つか例外も存在します。

+ +
    +
  • AllowOverride ディレクティブは +<Directory> +セクションでのみ使用可能です。
  • + +
  • FollowSymLinksSymLinksIfOwnerMatch の +Options は、 +<Directory> +セクションか .htaccess ファイルでのみ使用可能です。
  • + +
  • Options ディレクティブは、 +<Files> +と <FilesMatch> +セクションでは使用できません。
  • +
+
top
+
+

セクションのマージ方法

マージの順番は以下のようになっています:

    -
  1. <Directory> (正規表現無し) と +
  2. <Directory> (正規表現無し) と .htaccess を同時に (.htaccess が許可されていれば、それが - <Directory> を 上書きします) + <Directory> を上書きします)
  3. -
  4. <DirectoryMatch> と正規表現のある - <Directory>
  5. +
  6. <DirectoryMatch> + (と <Directory ~>
  7. -
  8. <Files> と - <FilesMatch> を同時に
  9. +
  10. <Files> と + <FilesMatch> を同時に
  11. -
  12. <Location> と - <LocationMatch> を同時に
  13. +
  14. <Location> と + <LocationMatch> を同時に
-

<Directory> +

<Directory> 以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 - <Directory> (上のグループ 1) - はディレクトリが短いものから長いものへと処理されます。複数の - <Directory> セクションが同じディレクトリに + <Directory> (上のグループ 1) + はディレクトリが短いものから長いものへと処理されます。ですから、 + 例えば <Directory /var/web/dir1> は + <Directory /var/web/dir/subdir> の前に処理されます。複数の + <Directory> セクションが + 同じディレクトリに 適用される場合は、設定ファイル中の順番に従って処理されます。 - Include + Include によって挿入された設定は 挿入しているファイルの - Include + Include ディレクティブの位置にあったかのように扱われます。

-

<VirtualHost> セクション中のセクションは +

<VirtualHost> セクション中のセクションは バーチャルホストの定義の外側の対応するセクションの に適用されます。これによりバーチャルホストが メインのサーバ設定を上書きできるようなります。

後のセクションのディレクティブが前のセクションのものを上書きします。

-

セクションを使う際の注意

-

一般的なガイドラインは:

- -
    -
  • ファイルシステムレベルでオブジェクトのマッチを行なうときは、 - <Directory><Files> - を使う必要があります。
  • - -
  • URL レベルでオブジェクトのマッチを行なうときは - <Location> を使う必要があります。
  • -
- -

重要な例外は:

- -
    -
  • プロキシの制御は <Directory> - を通して行なわれます。これはプロキシが - <Location> - より前から存在したことによるミスです。将来の設定言語ではおそらく - <Location> に切り替えられるでしょう。
  • -
- -

.htaccess ファイルの解析に関する注意:

- -
    -
  • Location 中で .htaccess の解析方法を変更しても、 - 何も変わりません。.htaccess の解析は既に終わっているからです。
  • -
+

技術メモ

+ 実際には、名前を変換する段階 (URL + をファイル名にマップするために Alias や + DocumentRoot が使用されるところ) の直前に + <Location>/<LocationMatch> + が行なわれます。 + これらを適用した結果は変換が終わった後に完全に捨てられます。 +
+

-

<Location> とシンボリックリンク:

+

次はマージの順番を示すための恣意的な例になっています。 +リクエスト全てに適用されるとして、本例のディレクティブは +A > B > C > D > E の順番に適用されます。

-
    -
  • "Options FollowSymLinks" や - "Options SymLinksIfOwnerMatch" は - <Location>, - <LocationMatch>, - <DirectoryMatch> - セクションでは使うことができません - (それらのオプションは単に無視されます)。それらのオプションは - <Directory> セクション (もしくは - .htaccess ファイル) の中でのみ使用可能です。
  • -
+

+<Location />
+E
+</Location>
+
+<Files f.html>
+D
+</Files>
+
+<VirtualHost *>
+<Directory /a/b>
+B
+</Directory>
+</VirtualHost>
+
+<DirectoryMatch "^.*b$">
+C
+</DirectoryMatch>
+
+<Directory /a/b>
+A
+</Directory>
+
+

-

<Files>Options:

+

もっと具体的な、次の例を考えてみましょう。 +<Directory> +セクションに設置されたアクセス制限に関わらず、 +<Location> +セクションが最後に評価されて、サーバへのアクセスは制限されません。 +つまり、マージの順番は重要ですので、注意して使用してください!

-
    -
  • Apache はこの状況はチェックしませんが、 - <Files> セクションの中で Options - ディレクティブを使用しても効果はありません。
  • -
+

+<Location />
+Order deny,allow
+Allow from all
+</Location>
+
+# Woops! This <Directory> section will have no effect
+<Directory />
+Order allow,deny
+Allow from all
+Deny from badguy.example.com
+</Directory> +

-

他の注意:

-
    -
  • 実際には、名前を変換する段階 (URL - をファイル名にマップするために Alias や - DocumentRoot が使用されるところ) の直前に - <Location>/<LocationMatch> - が行なわれます。 - これらを適用した結果は変換が終わった後に完全に捨てられます。 -
  • -
- - - +
+ + \ No newline at end of file diff --git a/docs/manual/sections.xml.ja b/docs/manual/sections.xml.ja new file mode 100644 index 0000000000..2baa15a588 --- /dev/null +++ b/docs/manual/sections.xml.ja @@ -0,0 +1,458 @@ + + + + + + + + +セクションの設定 + +

設定ファイル中のディレクティブは +サーバ全体に適用されたり、特定のディレクトリやファイル、ホスト、URL にのみ +適用されるように制限したりすることができます。この文書は設定用のセクションの +コンテナや .htaccess ファイルを使って他の設定ディレクティブの +スコープを変更する方法を説明します。

+
+ +
設定用セクションコンテナの種類 + + + +core +mod_proxy + + +Directory +DirectoryMatch +Files +FilesMatch +IfDefine +IfModule +Location +LocationMatch +Proxy +ProxyMatch +VirtualHost + + + +

コンテナには二つの基本となる種類があります。ほとんどのコンテナは +各リクエストに対して評価されます。その場合、コンテナ中のディレクティブは +コンテナにマッチするリクエストにのみ適用されます。 +一方、IfDefine コンテナと IfModule コンテナは +サーバの起動時と再起動時にのみ評価されます。起動時に条件が真であれば、 +コンテナ中のディレクティブはすべてのリクエストに適用されます。条件が +偽であれば、コンテナ中のディレクティブは無視されます。

+ +

IfDefine ディレクティブは +httpd コマンドラインで適切なパラメータが定義されたときにのみ +適用されるディレクティブを囲います。例えば次の設定では、サーバが +httpd -DClosedForNow を使って起動されたときだけすべての +リクエストを別のサイトにリダイレクトします:

+ + +<IfDefine ClosedForNow>
+Redirect / http://otherserver.example.com/
+</IfDefine> +
+ +

IfModule は +非常に似ていますが、代わりにサーバ上でモジュールが使用可能な場合にのみ +適用可能なディレクティブを囲います。モジュールはサーバに +静的に組み込まれているか、動的に組み込むようになっていて、設定ファイル中で +LoadModule の行がより前の +部分に書かれている必要があります。このディレクティブは特定のモジュールの +存在に関わらず設定ファイルが動作する必要がある場合にのみ使ってください。 +常に動作して欲しいディレクティブを囲むために使うべきではありません。 +存在しないモジュールに関する有用なエラーメッセージの発生を抑制してしまいますので。 +

+ +

次の例では、mod_mime_magic があるときにのみ MimeMagicFiles ディレクティブが +適用されます。

+ + +<IfModule mod_mime_magic.c>
+MimeMagicFile conf/magic
+</IfModule> +
+ +

IfDefine ディレクティブと +IfModule ディレクティブは +テストの前に "!" を付けることで否定の条件を適用することができます。 +また、これらのセクションはより複雑な制限を課すために入れ子にすることができます。 +

+
+ +
ファイルシステムとウェブ空間 + +

最もよく使われる設定のセクションコンテナはファイルシステムやウェブ空間の +特定の場所の設定を変更するものです。まず、この二つの違いを理解することが +大切です。ファイルシステムはオペレーティングシステムから見たディスクの内容です。 +たとえば、デフォルトのインストールでは Apache は Unix ファイルシステムでは +/usr/local/apache2 に、Windows ファイルシステムでは +"c:/Program Files/Apache Group/Apache2" に存在します。 +(Apache では Windows でもパスセパレータとしてスラッシュを使うことに +気をつけてください。) 対照的に、ウェブ空間はあなたのサイトを +ウェブサーバから配信されるものとして見たもので、クライアントに見えるものです。 +デフォルトの Unix 上の Apache のインストールではウェブ空間の +/dir/ というパスはファイルシステムの +/usr/local/apache2/htdocs/dir/ というパスに対応します。 +ウェブページはデータベースや他の場所から動的に生成することもできますので、 +ウェブ空間はファイルシステムに直接マップする必要はありません。

+ +
ファイルシステムコンテナ + +

Directory ディレクティブと +Files ディレクティブ、それと +それらの正規表現版はディレクティブをファイルシステムの一部分に対して適用します。 +Directory セクションの +中のディレクティブは指定されたディレクトリとそのすべてのサブディレクトリに +適用されます。.htaccess ファイルを +使うことでも同じ効果を得ることができます。例えば、次の設定では +/var/web/dir1 とすべてのサブディレクトリに対して +ディレクトリインデックスを行ないます。

+ + +<Directory /var/web/dir1>
+Options +Indexes
+</Directory> +
+ +

Files セクションの +中にあるディレクティブはどのディレクトリにあるかに関わらず、指定された名前の +すべてのファイルに適用されます。ですから例えば以下の設定ディレクティブが +設定ファイルの主セクションに書かれたときには、すべての場所の +private.html という名前のファイルへのアクセスを拒否します。

+ + +<Files private.html>
+Order allow,deny
+Deny from all
+</Files> +
+ +

ファイルシステムの特定の場所にあるファイルを指定するために、 +Files セクションと +Directory セクションを +組み合わせることができます。例えば、次の設定では +/var/web/dir1/private.html, +/var/web/dir1/subdir2/private.html, +/var/web/dir1/subdir3/private.html など、 +/var/web/dir1/ ディレクトリの下にあるすべての +private.html へのアクセスを拒否します。

+ + +<Directory /var/web/dir1>
+<Files private.html>
+Order allow,deny
+Deny from all
+</Files>
+</Directory> +
+
+ +
ウェブ空間コンテナ + +

一方、Location +ディレクティブとその正規表現版はウェブ空間上の内容に対して設定を変更します。 +たとえば、次の設定では /private で始まる URL パスへのアクセスを制限します。 +具体的には、 +http://yoursite.example.com/private, +http://yoursite.example.com/private123, +http://yoursite.example.com/private/dir/file.html +へのリクエストや、 +他の同様に /private 文字列で始まるリクエストに +適用されます。

+ + +<Location /private>
+Order Allow,Deny
+Deny from all
+</Location> +
+ +

Location +ディレクティブはファイルシステムと関係ある必要が全くありません。 +たとえば次の例では、どのようにして特定の URL を +mod_statusで提供されている Apache +内部ハンドラにマップするかを示しています。ファイルシステムに +server-status というファイルが存在する必要はありません。

+ + +<Location /server-status>
+SetHandler server-status
+</Location> +
+
+ +
ワイルドカードと正規表現 + +

Directory, +Files, +Location +ディレクティブでは、 C 標準ライブラリの fnmatch のように +shell スタイルのワイルドカードキャラクタが使用できます。 +"*" 文字は任意の文字列にマッチし、"?" 文字は任意の 1 文字にマッチし、 +"[seq]" は seq の任意の文字にマッチします。 +"/" 文字はどのワイルドカードでもマッチされません。 +明示的に指定する必要があります。

+ +

これより柔軟なマッチングが必要な場合は、これらのコンテナの正規表現 +(regex) 版である +DirectoryMatch, +FilesMatch, +LocationMatch +があり、マッチを選択するのに perl 互換正規表現を使用できます。しかし、次の設定のマージに目を通して、 +regex セクションを使用することで、ディレクティブの適用がどのように +変化するか把握しておいてください。

+ +

全ユーザディレクトリの設定を変更する、非 regex +ワイルドカードセクションは次のようになります。

+ + +<Directory /home/*/public_html>
+Options Indexes
+</Directory> +
+ +

regex セクションを使用することで、画像ファイルの多くのタイプに対する +アクセスを一度に拒否できます。

+ +<FilesMatch \.(?i:gif|jpe?g|png)$>
+Order allow,deny
+Deny from all
+</FilesMatch> +
+ +
+ +
いつ何を使うか + +

ファイルシステムコンテナとウェブ空間コンテナを使い分けるのは、 +実際には非常に簡単です。ファイルシステムに依存する +オブジェクトにディレクティブを適応する場合は、必ず +Directory か +Files +を使用します。ファイルシステムに依存しないオブジェクト +(データベースから生成されるウェブページなど) +にディレクティブを適用する際には、 +Location +を使用します。

+ +

ファイルシステム上のオブジェクトへのアクセスを制限するために、 +Location +を決して使用ないようにしましょう。 +同一のファイルシステム位置にマップしている、ウェブ空間位置 (URL) +が多数あって、設定した制限を迂回されてしまうかもしれないからです。 +例えば次の設定を考えてみましょう。

+ + +<Location /dir/>
+Order allow,deny
+Deny from all
+</Location> +
+ +

http://yoursite.example.com/dir/ +へのリクエストでは上手く動作します。しかし大文字小文字を区別しない +ファイルシステムを使っていたらどうなるでしょう? +http://yoursite.example.com/DIR/ +へのリクエストで簡単にアクセス制限を迂回されてしまいます。これに対して +Directory +ディレクティブを使用すると、どのように呼び出されたかに関わらず +その場所から提供される内容に適用されます。 +(例外はファイルシステムのリンクです。シンボリックリンクを使って、 +同一のディレクトリを複数のファイルシステムに設置できます。 +Directory +ディレクティブはパス名をリセットすることなくシンボリックリンクを +辿ります。ですから、高度なセキュリティが要求される場合は、 +適切に Options +ディレクティブを使用してシンボリックリンクを無効にするべきです。)

+ +

大文字小文字を区別するファイルシステムを使用しているから上記のことは +無関係だと思われるかもしれませんが、 +同一のファイルシステム位置に複数のウェブ空間位置をマップする方法は、 +他にいくらでもあるということを覚えていてください。 +ですからできる限りファイルシステムコンテナを使用してください。 +しかしながら一つだけ例外があります。 +<Location /> セクションはどんな URL +にも関わらず適用されるので、そこにアクセスを制限するディレクティブを +居れることは完全に安全です。

+
+ +
+ +
バーチャルホスト + +

VirtualHost +コンテナは特定のホストに適用するディレクティブを格納します。 +一台のマシンで複数のホストを異なる設定で提供したいときに有用です。 +詳細に関してはバーチャルホストドキュメントを +ご覧下さい。

+
+ +
プロクシ + +

Proxy +と ProxyMatch +コンテナは、mod_proxy +プロクシサーバを経由してアクセスされる特定の URL にマッチするサイトに +対してのみ適用される +設定ディレクティブを格納します。例えば次の設定は、プロキシサーバが +cnn.com ウェブサイトをアクセスするためには使えないようにします。

+ + +<Proxy http://cnn.com/*>
+Order allow,deny
+Deny from all
+</Proxy> +
+
+ +
どのディレクティブが使えるの? + +

どのタイプの設定セクションでどのディレクティブが使用できるかは、 +ディレクティブの Context +を見てください。 +Directory +で使用可能なものは全て、同様に +DirectoryMatch, +Files, +FilesMatch, +Location, +LocationMatch, +Proxy, +ProxyMatch +セクションで使用可能です。しかしながら幾つか例外も存在します。

+ +
    +
  • AllowOverride ディレクティブは +Directory +セクションでのみ使用可能です。
  • + +
  • FollowSymLinksSymLinksIfOwnerMatch の +Options は、 +Directory +セクションか .htaccess ファイルでのみ使用可能です。
  • + +
  • Options ディレクティブは、 +Files +と FilesMatch +セクションでは使用できません。
  • +
+
+ +
セクションのマージ方法 + +

マージの順番は以下のようになっています:

+ +
    +
  1. Directory (正規表現無し) と + .htaccess を同時に (.htaccess が許可されていれば、それが + Directory を上書きします) +
  2. + +
  3. DirectoryMatch + (と <Directory ~>
  4. + +
  5. Files と + FilesMatch を同時に
  6. + +
  7. Location と + LocationMatch を同時に
  8. +
+ +

Directory + 以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。 + Directory (上のグループ 1) + はディレクトリが短いものから長いものへと処理されます。ですから、 + 例えば <Directory /var/web/dir1> は + <Directory /var/web/dir/subdir> の前に処理されます。複数の + Directory セクションが + 同じディレクトリに + 適用される場合は、設定ファイル中の順番に従って処理されます。 + Include + によって挿入された設定は 挿入しているファイルの + Include + ディレクティブの位置にあったかのように扱われます。

+ +

VirtualHost セクション中のセクションは + バーチャルホストの定義の外側の対応するセクションの + に適用されます。これによりバーチャルホストが + メインのサーバ設定を上書きできるようなります。

+ +

後のセクションのディレクティブが前のセクションのものを上書きします。

+ + +技術メモ + 実際には、名前を変換する段階 (URL + をファイル名にマップするために Alias や + DocumentRoot が使用されるところ) の直前に + Location/LocationMatch + が行なわれます。 + これらを適用した結果は変換が終わった後に完全に捨てられます。 + +
+ +

次はマージの順番を示すための恣意的な例になっています。 +リクエスト全てに適用されるとして、本例のディレクティブは +A > B > C > D > E の順番に適用されます。

+ + +<Location />
+E
+</Location>
+
+<Files f.html>
+D
+</Files>
+
+<VirtualHost *>
+<Directory /a/b>
+B
+</Directory>
+</VirtualHost>
+
+<DirectoryMatch "^.*b$">
+C
+</DirectoryMatch>
+
+<Directory /a/b>
+A
+</Directory>
+
+
+ +

もっと具体的な、次の例を考えてみましょう。 +Directory +セクションに設置されたアクセス制限に関わらず、 +Location +セクションが最後に評価されて、サーバへのアクセスは制限されません。 +つまり、マージの順番は重要ですので、注意して使用してください!

+ + +<Location />
+Order deny,allow
+Allow from all
+</Location>
+
+# Woops! This <Directory> section will have no effect
+<Directory />
+Order allow,deny
+Allow from all
+Deny from badguy.example.com
+</Directory> +
+ +
+ +
+
diff --git a/docs/manual/sections.xml.meta b/docs/manual/sections.xml.meta index 5cbd0e28a7..f12ea0e1d8 100644 --- a/docs/manual/sections.xml.meta +++ b/docs/manual/sections.xml.meta @@ -7,6 +7,6 @@ en - ja + ja -- 2.50.1