ไดเรกทอรี Apache นั้นควรจะสัมพันธ์กับ DocumentRoot หรือไม่?


14

Directoryคำสั่งApache ควรจะสัมพันธ์กับ DocumentRoot หรือไม่? ฉันถามในบริบทของ VirtualHost แต่ก็ไม่ควรสร้างความแตกต่าง

กล่าวอีกนัยหนึ่งมันควรจะเป็น:

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

หรือ

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

ทั้งงาน Apache ไดเรกทอรีเอกสารบอกว่า:

ไดเรกทอรีเส้นทางเป็นเส้นทางแบบเต็มไปยังไดเรกทอรีหรือสตริง wild-card ...

... แต่จากนั้นพวกเขาแสดงสองตัวอย่างที่ขัดแย้งกับคำสั่ง "เส้นทางแบบเต็ม"

ED:นอกจากนี้ยังมีตัวอย่างขัดแย้งบนหน้าอาปาเช่ปรับแต่งประสิทธิภาพในFollowSymlinks และ SymLinksIfOwnerMatchและAllowOverrideส่วน

เพื่อความสนุกฉันดูการตั้งค่า vhost เริ่มต้นของ Debian และพบสิ่งนี้:

<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และนำไปใช้ตัวเลือกภายในสั่งการเพียง ตัวอย่างที่สองของคุณอ้างถึงรูทของระบบไฟล์ (ตามตัวอักษร/)

คุณยังไม่ได้โพสต์ส่วนที่เหลือของคำสั่ง แต่โดยทั่วไปจะใช้เป็นวิธีหนึ่งในการพยายามขัง Apache และ จำกัด การเข้าถึงและมักจะ (แต่ไม่เสมอไป) วางไว้ในไฟล์หลักapache2.confหรือhttpd.confไฟล์กำหนดค่าด้วย VirtualHosts ของคุณ เข้าถึงDocumentRootไดเรกทอรีของตนเองดังนั้นทั้งสองมักใช้ร่วมกัน

จากเอกสาร Apache :

โปรดทราบว่าการเข้าถึงเริ่มต้นสำหรับ <Directory /> คือการอนุญาตการเข้าถึงทั้งหมด ซึ่งหมายความว่า Apache httpd จะให้บริการไฟล์ใด ๆ ที่แมปจาก URL ขอแนะนำให้คุณเปลี่ยนสิ่งนี้ด้วยบล็อกเช่น:
    <ไดเรกทอรี />
      ต้องมีการปฏิเสธทั้งหมด
    </ ไดเรกทอรี>
จากนั้นแทนที่สิ่งนี้สำหรับไดเรกทอรีที่คุณต้องการเข้าถึงได้ ดูหน้าเคล็ดลับความปลอดภัยสำหรับรายละเอียดเพิ่มเติม

หากตัวอย่างที่สองอ้างถึงระบบไฟล์อย่างแท้จริง/แล้ว Apache ให้บริการ/var/wwwไดเรกทอรีทำไม
เจฟฟ์

1
Apache DocumentRootจะให้บริการ Directoryสั่งแยกต่างหากโดยสิ้นเชิงและมีผลของการบอกว่า "ใช้การกำหนดค่าที่ล้อมรอบไปยังไดเรกทอรีนี้และไดเรกทอรีย่อยทุกที่" การกำหนดค่าที่เฉพาะเจาะจงมากขึ้นจะมีความสำคัญดังนั้นจะแทนที่<Directory /var/www/> <Directory />
Craig Watson

ฉันเห็น. ดังนั้น<Directory />จากบริบท VirtualHost สามารถแทนที่ตัวเลือกทั้งเซิร์ฟเวอร์ (หรือการตั้งค่าอื่น ๆ ) ของ<Directory />? นั่นทำให้รู้สึก ขอบคุณสำหรับความช่วยเหลือ
Jeff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.