【问题标题】:Does Apache2 support virtual hosting of subdomains?Apache2 是否支持子域的虚拟主机?
【发布时间】:2011-12-24 01:25:35
【问题描述】:

目前我的 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 网页包括来自jane's 网页的脚本/图像.

【问题讨论】:

    标签: apache2 subdomain virtualhost


    【解决方案1】:

    仅使用本地措施(/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

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

    【讨论】:

    • 这帮助我记住了我忘记更改主机文件。感谢过去的人。
    • @MeowMix 很高兴我能帮助至少一个人
    • 命令a2ensite example.com创建从sites-available/example.comsites-enabled/example.com的符号链接,相反的命令是a2dissite example.com,这将禁用它。
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 2016-10-26
    • 2013-02-17
    • 2023-03-04
    • 2016-10-22
    • 2013-04-26
    • 2015-06-24
    • 2019-01-01
    相关资源
    最近更新 更多