2013-09-25 106 views
5
nhắn

Lỗi là:apache suexec "lệnh không docroot"

command not in docroot (/home/site1/cgi-bin/test.pl). 

Here Tôi thấy điều này:

suexec đòi hỏi kịch bản CGI được dưới DocumentRoot của máy chủ (không phải là VirtualHost DocumentRoot) . Nó được cho phép, tuy nhiên, cho VirtualHost DocumentRoot là một liên kết tượng trưng đến một thư mục xuất hiện bên dưới DocumentRoot thực.

một phần của cấu hình máy chủ ảo là:

[...] 
DirectoryIndex index.html index.html index.php 
DocumentRoot /home/site1/htdocs 

SuexecUserGroup site1 site1 

ScriptAlias /cgi-bin/ /home/site1/cgi-bin/ 
<Location /home/site1/cgi-bin> 
      Options +ExecCGI 
</Location> 

<Directory /home/site1/> 
Options -Includes -Indexes -FollowSymLinks +ExecCGI MultiViews 
AddHandler cgi-script .cgi .pl 
AllowOverride none 
Order allow,deny 
Allow from all 
</Directory> 
[...] 

Vì vậy, tôi thích có Perl script bên trong cgi-bin, nhưng nếu tôi không thể giải quyết vấn đề này tôi có thể di chuyển tất cả các kịch bản để htdocs.

Trả lời

13

suEXEC có riêng docroot của nó mà là hoàn toàn không phụ thuộc vào bất cứ điều gì bạn cấu hình trong cấu hình Apache của bạn. Bạn có thể xem tài liệu của suEXEC là bằng cách gọi:

suexec -V 

Bạn có thể cần phải root cho điều đó. Trong trường hợp của tôi, docroot là /var/www. Bạn sẽ phải đặt kịch bản của bạn ở đó. Không có cách nào để thay đổi điều này lưu biên dịch lại suEXEC. Đừng cố gắng sử dụng các liên kết tượng trưng để giữ các tập lệnh của bạn bên ngoài /var/www (hoặc bất kỳ số nào suEXEC của bạn được định cấu hình).

Chỉnh sửa: như đã đề cập bởi @insaner trong các nhận xét, lệnh có thể là suexec hoặc như tôi đã thấy trên ít nhất một máy chủ suexec2. suEXEC chỉ là những gì tài liệu Apache gọi là mô-đun/tính năng.

+3

Gói 'apache2-suexec-custom' cho phép linh hoạt hơn. –

+0

Excelent. Chính xác những gì tôi đang tìm kiếm. –

+0

Lệnh có nhiều khả năng là 'suexec -V', hãy chú ý đến mũ. – insaner

-4

Thay đổi DocumentRoot /home/site1/htdocs để DocumentRoot /home/site1/