2011-11-07 14 views
7

Hiện nay máy chủ Apache của tôi được thiết lập như vậyApache2 có hỗ trợ lưu trữ ảo các miền phụ không?

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

Vấn đề là tất cả mọi thứ dưới đây /var/www có thể truy cập từ mọi nơi khác. Nếu tôi có một trang web /var/www/john/bio.html, sau đó trang web đó có thể mượn kịch bản/hình ảnh từ var/www/jane/

Tôi muốn thiết lập máy chủ Apache của tôi như vậy

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.john.example.com 
ServerAlias john.example.com 
DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.jane.example.com 
ServerAlias jane.example.com 
DocumentRoot /var/www/jane 
</VirtualHost> 

Vì vậy, tất cả các tập tin cho người dùng john đi trong /var/www/john/ thư mục và tương tự cho người dùng jane. Sau đó, với các liên kết tượng trưng bị tắt (theo mặc định), và truy cập chỉ được cung cấp từ /var/www/user/ xuống dưới (một lần nữa theo mặc định), tôi không phải lo lắng về trang web john's bao gồm tập lệnh/hình ảnh từ trang web jane's.

Trả lời

21

Chỉ sử dụng các biện pháp cục bộ (/etc/hosts thay vì DNS) Tôi thấy rằng điều này thực sự có thể hoạt động.

Trước tiên, hãy thay đổi tệp /etc/hosts để lập bản đồ (các) tên trang web bạn muốn (www.example.com) và địa chỉ IP đích (192.168.1.1). Tôi đã sử dụng địa chỉ IP cục bộ của mình.

IPAddress    Hostname     Alias 
-----------  -------------------------- ------------------ 
192.168.1.1  www.example.com    example.com 
192.168.1.1  www.john.example.com   john.example.com 
192.168.1.1  www.jane.example.com   jane.example.com 

trình duyệt web của bạn sẽ kiểm tra /etc/hosts tập tin của bạn trước nhìn vào các trang web trên toàn thế giới.

Tiếp đi qua tất cả các file của bạn config Apache (httpd.conf, apache2.conf, ports.conf, conf.d/*) và chắc chắn rằng trong chính xác một tập lệnh NameVirtualHost *:80 được ban hành (nó không phải là cổng :80 nhưng nếu nó được ban hành nhiều lần, bạn sẽ nhận được this problem). Mỏ được phát hành ở số /etc/apache2/ports.conf, vì vậy hãy đặt của bạn ở đó nếu bạn có. Cuối cùng, cập nhật tệp cấu hình Apache của bạn (tên tôi là /etc/apache2/sites-available/default) giống như vậy.

<VirtualHost *:80> 
    ServerName www.example.com 
    ServerAlias example.com 
    DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.john.example.com 
    ServerAlias john.example.com 
    DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.jane.example.com 
    ServerAlias jane.example.com 
    DocumentRoot /var/www/jane 
</VirtualHost> 

Là một bước cuối cùng, bạn có thể cần thêm các trang web để Apache bằng cách phát hành các lệnh dưới đây (bước này là không cần thiết, nếu bạn cung cấp cho tất cả các trang web vào sites-available/default và không thành tập tin riêng biệt cho các trang web cá nhân).

# a2ensite www.example.com 
# a2ensite www.john.example.com 
# a2ensite www.jane.example.com 

Sau khi làm điều này, john.example.com sẽ đi đến /var/www/john. Thư mục đó sau đó sẽ hoạt động như thư mục gốc và john sẽ không còn quyền truy cập vào www và do đó, không có quyền truy cập vào /var/www/jane.

Tương tự, sau khi thực hiện việc này, jane.example.com sẽ chuyển đến /var/www/jane. Thư mục đó sau đó sẽ hoạt động như thư mục gốc và jane sẽ không còn quyền truy cập vào www và do đó, không có quyền truy cập vào /var/www/john.

Với liên kết tượng trưng tắt --by default-- không phải thư mục sẽ có thể truy cập vào nhau

+0

này đã giúp tôi nhớ rằng tôi đã quên để thay đổi file host của tôi. Cảm ơn người đàn ông từ quá khứ. –

+0

@MeowMix vui vì tôi có thể giúp ít nhất một người – puk

+1

Lệnh 'a2ensite example.com' tạo liên kết tượng trưng từ 'sites-available/example.com' thành' sites-enabled/example.com', lệnh đối diện là 'a2dissite example.com ', sẽ vô hiệu hóa nó. – Honza