Apakah direktif Direktori Apache seharusnya relatif terhadap DocumentRoot atau tidak?

14

Apakah Directorydirektif Apache seharusnya relatif terhadap DocumentRoot atau tidak? Saya bertanya dalam konteks VirtualHost, tetapi seharusnya tidak ada bedanya.

Dengan kata lain, apakah itu seharusnya:

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

atau

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

Keduanya bekerja. The Apache Directory docs mengatakan:

Direktori-path adalah path lengkap ke direktori, atau string wild-card ...

... tapi kemudian mereka menunjukkan dua contoh yang bertentangan dengan pernyataan "path lengkap".

ED: Ada juga contoh kontradiktif pada halaman Tuning Kinerja Apache di bagian FollowSymLinks dan SymLinksIfOwnerMatch dan AllowOverride .

Untuk bersenang-senang saya melihat pengaturan vhost default Debian dan menemukan ini:

<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
sumber

Jawaban:

9

Dokumentasinya benar, dan <Directory>arahan harus menjadi path lengkap .

Contoh pertama Anda adalah bagaimana Anda harus mengkonfigurasi arahan untuk VirtualHosts, dan menerapkan opsi dalam arahan hanya untuk DocumentRoot. Contoh kedua Anda merujuk ke root filesystem (secara harfiah /).

Anda belum mengeposkan sisa arahan, tetapi ini biasanya digunakan sebagai cara untuk memenjarakan Apache dan membatasi aksesnya, dan biasanya (tetapi tidak selalu) ditempatkan di dalam file utama apache2.confatau httpd.confkonfigurasi, dengan VirtualHosts Anda secara eksplisit memungkinkan akses untuk DocumentRootdirektori mereka sendiri , sehingga keduanya sering digunakan bersama.

Dari dokumentasi Apache :

Perhatikan bahwa akses default untuk <Direktori /> adalah untuk mengizinkan semua akses. Ini berarti bahwa Apache httpd akan melayani file apa pun yang dipetakan dari URL. Anda disarankan untuk mengubahnya dengan blok seperti:
    <Direktori />
      Wajib semua ditolak
    </Directory>
dan kemudian menimpa ini untuk direktori yang Anda inginkan dapat diakses. Lihat halaman Tips Keamanan untuk lebih jelasnya.
Craig Watson
sumber
Jika contoh kedua benar-benar merujuk pada sistem file /, lalu mengapa Apache melayani /var/wwwdirektori?
Jeff
1
Apache akan melayani DocumentRoot. The Directorydirektif benar-benar terpisah, dan memiliki efek mengatakan "menerapkan konfigurasi tertutup untuk direktori ini dan semua subdirektori". Konfigurasi yang lebih spesifik diprioritaskan, sehingga <Directory /var/www/>akan menimpa <Directory />.
Craig Watson
Saya melihat. Jadi <Directory />dari konteks VirtualHost dapat menimpa Pilihan di seluruh server (atau pengaturan lainnya) dari <Directory />? Itu masuk akal. Terima kasih untuk bantuannya.
Jeff