Apache DirectoryディレクティブはDocumentRootに相対的であると想定されていますか?


14

Apache DirectoryディレクティブはDocumentRootに相対的であると想定されていますか?VirtualHostのコンテキストで尋ねますが、違いはありません。

言い換えれば、それは次のようになっていますか?

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...

または

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...

両方とも機能します。Apacheのディレクトリのドキュメントは言います:

Directory-pathは、ディレクトリへの絶対パス、またはワイルドカード文字列です...

...しかし、彼らは「フルパス」ステートメントと矛盾する2つの例を示しています。

ED:上の矛盾した例もありますApacheのパフォーマンス・チューニングのページはFollowSymLinksとSymLinksIfOwnerMatchのAllowOverrideのセクションが。

楽しみのために、Debianのデフォルトのvhostセットアップを見て、これを見つけました。

<VirtualHost *:80>
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

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

回答:


9

ドキュメントは正しく、<Directory>ディレクティブがあるべき完全なパス。

最初の例は、VirtualHostsのディレクティブを構成する方法と、ディレクティブ内のオプションをにのみ適用する方法DocumentRootです。2番目の例は、ファイルシステムのルートを参照しています(文字通り/)。

残りのディレクティブは投稿していませんが、これは通常、Apacheをjailしてアクセスを制限する方法として使用され、通常(常にではありません)メインファイルapache2.confまたはhttpd.conf構成ファイル内に配置され、VirtualHostsが明示的に許可します独自のDocumentRootディレクトリへのアクセス。したがって、この2つはしばしば一緒に使用されます。

Apacheドキュメントから:

<Directory />のデフォルトアクセスは、すべてのアクセスを許可することに注意してください。これは、Apache httpdがURLからマップされたファイルを提供することを意味します。次のようなブロックでこれを変更することをお勧めします。
    <ディレクトリ/>
      すべて拒否する必要があります
    </ Directory>
そして、アクセス可能なディレクトリにこれを上書きします。詳細については、セキュリティのヒントのページをご覧ください。

2番目の例が文字通りfilesystemを参照している場合、/Apacheが/var/wwwディレクトリを提供するのはなぜですか?
ジェフ

1
ApacheはDocumentRootDirectoryディレクティブは完全に分離され、そして「このディレクトリとすべてのサブディレクトリに囲まれた設定を適用します」と言って効果があります。より具体的な構成が優先されるため、<Directory /var/www/>をオーバーライドします<Directory />
クレイグワトソン

そうですか。だから、<Directory />バーチャルホストのコンテキストからのサーバ全体のオプション(またはその他の設定)を上書きすることができますか<Directory />?それは理にかなっている。助けてくれてありがとう。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.