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

puk*_*puk 7 subdomain apache2 virtualhost

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

<VirtualHost *:80>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

问题是下面的所有内容/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>
Run Code Online (Sandbox Code Playgroud)

因此,所有用户的文件john去的/var/www/john/文件夹,同样的用户jane.然后,关闭符号链接(默认情况下),并且仅从/var/www/user/下方提供访问(默认情况下再次),我不必担心john's网页包含来自jane's网页的脚本/图像.

puk*_*puk 22

仅使用本地度量(/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
Run Code Online (Sandbox Code Playgroud)

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

接下来通过所有你的Apache配置文件(httpd.conf,apache2.conf,ports.conf,conf.d/*),并确保在只有一个文件的命令NameVirtualHost *:80发出(它不必是港口:80,但如果它发出超过一次,你会得到这个问题).我的发行是/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>
Run Code Online (Sandbox Code Playgroud)

作为最后一步,您可能需要通过发出以下命令将网站添加到Apache(如果您将所有网站分别放入sites-available/default各个网站的单独文件中,则不需要执行此步骤).

# a2ensite www.example.com
# a2ensite www.john.example.com
# a2ensite www.jane.example.com
Run Code Online (Sandbox Code Playgroud)

这样做之后,john.example.com将会去/var/www/john.然后该目录将充当根目录,并且john将不再具有访问权限www,因此无权访问/var/www/jane.

同样,在这之后,jane.example.com将会去/var/www/jane.然后该目录将充当根目录,并且jane将不再具有访问权限www,因此无权访问/var/www/john.

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