Apache2是否支持子域的虚拟托管?

时间:2011-11-07 23:37:58

标签: apache2 subdomain virtualhost

目前我的Apache服务器设置如此

<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网页包含来自{的脚本/图像{1}}网页。

1 个答案:

答案 0 :(得分: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

您的网络浏览器会在查看万维网之前检查您的/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

关闭符号链接 - 默认情况下 - 两个目录都不能互相访问