2011-11-07 61 views
7

目前我的Apache服务器设置像这样Apache2是否支持子域的虚拟主机?

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

的问题是,一切都低于/var/www是从其他地方访问。如果我有一个网页/var/www/john/bio.html,那么该网页会从var/www/jane/

我想设置我的Apache服务器,像这样

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

借用脚本/图片,使所有用户john文件走在/var/www/john/文件夹,同样对于用户jane。然后,关闭符号链接(默认情况下),并且仅向下(默认情况下为/var/www/user/)提供的访问权限,我不必担心john's网页包括jane's网页的脚本/图像。

回答

21

仅使用本地度量(/etc/hosts而不是DNS)我发现这确实可行。

首先,将您的/etc/hosts文件更改为具有所需网站名称(www.example.com)和目标IP地址(192.168.1.1)的映射。我用我的本地IP地址。

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 

Web浏览器将检查您的/etc/hosts文件之前看万维网。

下一页浏览所有你的Apache配置文件(httpd.confapache2.confports.confconf.d/*),并确保在只有一个文件的命令NameVirtualHost *:80发出(它没有被端口:80但如果它发出不止一次,你会得到this problem)。矿是在/etc/apache2/ports.conf发出的,所以如果你有必要的话,请把它放在那里。最后,像这样更新你的Apache配置文件(我的是/etc/apache2/sites-available/default)。

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

最后一步,你可能需要通过发出以下命令来添加网站到Apache(这一步是没有必要的,如果你给所有的网站进入sites-available/default,而不是为个人网站单独的文件)。

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

这样做了以后,john.example.com会去/var/www/john。该目录将作为根目录,并且john将不再有权访问www,因此无权访问/var/www/jane

同样,这样做后,jane.example.com将去/var/www/jane。该目录将作为根目录,并且jane将不再有权访问www,因此无权访问/var/www/john

符号链接关闭 - 截至default--既不目录将能够访问对方

+0

这让我想起,我忘了改变我的hosts文件。感谢过去的人。 –

+0

@MeowMix很高兴我可以帮助至少一个人 – puk

+1

命令'a2ensite example.com'从'sites-available/example.com'创建符号链接到'sites-enabled/example.com',相反的命令是'a2dissite example.com ',这会禁用它。 – Honza