Soll die Apache Directory-Direktive relativ zum DocumentRoot sein oder nicht?

14

Soll die Apache- DirectoryDirektive relativ zum DocumentRoot sein oder nicht? Ich frage im Rahmen eines VirtualHost, aber es sollte keinen Unterschied machen.

Mit anderen Worten, soll es sein:

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

oder

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

Beide arbeiten. In den Apache Directory- Dokumenten heißt es:

Verzeichnispfad ist entweder der vollständige Pfad zu einem Verzeichnis oder eine Platzhalterzeichenfolge ...

... aber dann zeigen sie zwei Beispiele, die der Aussage "vollständiger Pfad" widersprechen.

ED: Es gibt auch widersprüchliche Beispiele auf der Seite Apache Performance Tuning in den Abschnitten FollowSymLinks und SymLinksIfOwnerMatch und AllowOverride .

Zum Spaß habe ich mir Debians vhost-Standardsetup angesehen und Folgendes gefunden:

<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>
    ...
Jeff
quelle

Antworten:

9

Die Dokumentation ist korrekt und die <Directory>Direktive sollte der vollständige Pfad sein.

Im ersten Beispiel sollten Sie die Direktive für VirtualHosts konfigurieren und die Optionen in der Direktive nur auf die Direktive anwenden DocumentRoot. Ihr zweites Beispiel bezieht sich (wörtlich /) auf den Dateisystemstamm .

Sie haben den Rest der Direktive noch nicht gepostet, aber dies wird normalerweise verwendet, um den Zugriff auf Apache einzuschränken, und wird normalerweise (aber nicht immer) innerhalb der Haupt- apache2.confoder httpd.confKonfigurationsdateien abgelegt, wobei VirtualHosts dies ausdrücklich zulässt Zugriff für ihre eigenen DocumentRootVerzeichnisse, so dass die beiden oft zusammen verwendet werden.

Aus der Apache-Dokumentation :

Beachten Sie, dass der Standardzugriff für <Directory /> den gesamten Zugriff zulässt. Dies bedeutet, dass Apache httpd alle von einer URL zugeordneten Dateien bereitstellt. Es wird empfohlen, dies mit einem Block wie dem folgenden zu ändern:
    <Directory />
      Alles verweigert erfordern
    </ Directory>
und überschreiben Sie dies für Verzeichnisse, auf die Sie zugreifen möchten. Weitere Informationen finden Sie auf der Seite Sicherheitstipps .
Craig Watson
quelle
Wenn sich das zweite Beispiel buchstäblich auf das Dateisystem bezieht /, warum bedient Apache dann das /var/wwwVerzeichnis?
Jeff
1
Apache wird dem dienen DocumentRoot. Die DirectoryDirektive ist völlig unabhängig und hat den Effekt, dass "die beigefügte Konfiguration auf dieses Verzeichnis und alle Unterverzeichnisse angewendet wird". Spezifischere Konfigurationen haben Priorität, werden also <Directory /var/www/>außer Kraft gesetzt <Directory />.
Craig Watson
Aha. So <Directory />aus einem VirtualHost-Kontext können serverweite Optionen (oder andere Einstellungen) von überschreiben <Directory />? Das macht Sinn. Danke für die Hilfe.
Jeff