Lệnh của Thư mục Apache có được coi là có liên quan đến DocumentRoot hay không?


14

Lệnh của Apache có Directoryđược coi là có liên quan đến DocumentRoot hay không? Tôi hỏi trong ngữ cảnh của Virtualhost, nhưng nó không tạo ra sự khác biệt nào.

Nói cách khác, nó được cho là:

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

hoặc là

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

Cả hai đều làm việc. Các tài liệu thư mục Apache nói:

Đường dẫn thư mục là đường dẫn đầy đủ đến thư mục hoặc chuỗi ký tự đại diện ...

... nhưng sau đó họ cho thấy hai ví dụ mâu thuẫn với tuyên bố "đường dẫn đầy đủ".

ED: Ngoài ra còn có các ví dụ mâu thuẫn trên trang Điều chỉnh hiệu suất Apache trong các phần FollowSymLinks và SymLinks IfOwnerMatchAllowOverride .

Để giải trí, tôi đã xem thiết lập vhost mặc định của Debian và tìm thấy điều này:

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

Câu trả lời:


9

Tài liệu này là chính xác, và <Directory>chỉ thị phải là đường dẫn đầy đủ .

Ví dụ đầu tiên của bạn là cách bạn nên định cấu hình chỉ thị cho Virtualhost và áp dụng các tùy chọn trong chỉ thị cho chỉ DocumentRoot. Ví dụ thứ hai của bạn là đề cập đến root hệ thống tập tin (theo nghĩa đen /).

Bạn đã không đăng phần còn lại của chỉ thị, nhưng điều này thường được sử dụng như một cách cố gắng để ngăn chặn Apache và hạn chế quyền truy cập của nó, và thường (nhưng không phải luôn luôn) được đặt trong các tệp chính apache2.confhoặc httpd.confcấu hình, với Virtualhost của bạn cho phép rõ ràng truy cập cho các DocumentRootthư mục riêng của họ , vì vậy cả hai thường được sử dụng cùng nhau.

Từ tài liệu Apache :

Lưu ý rằng quyền truy cập mặc định cho <Directory /> là cho phép tất cả quyền truy cập. Điều này có nghĩa là Apache httpd sẽ phục vụ bất kỳ tệp nào được ánh xạ từ một URL. Bạn nên thay đổi điều này bằng một khối như:
    <Thư mục />
      Yêu cầu tất cả bị từ chối
    </ Thư mục>
và sau đó ghi đè lên thư mục bạn muốn truy cập. Xem trang Mẹo bảo mật để biết thêm chi tiết.

Nếu ví dụ thứ hai thực sự đề cập đến hệ thống tập tin /, thì tại sao Apache lại phục vụ /var/wwwthư mục?
Jeff

1
Apache sẽ phục vụ DocumentRoot. Lệnh Directorynày hoàn toàn riêng biệt và có tác dụng nói "áp dụng cấu hình kèm theo cho thư mục này và tất cả các thư mục con". Cấu hình cụ thể hơn được ưu tiên, do đó <Directory /var/www/>sẽ ghi đè <Directory />.
Craig Watson

Tôi hiểu rồi. Vậy <Directory />từ ngữ cảnh Virtualhost có thể ghi đè Tùy chọn trên toàn máy chủ (hoặc các cài đặt khác) của <Directory />? Điều đó có ý nghĩa. Cảm ơn đã giúp đỡ.
Jeff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.