Apache2 www1 而不是 www

Apache2 www1 而不是 www

因此我创建了一个非常简单的网站,其中仅包含带有文本“welcome”的index.html。该网站的虚拟主机如下:

ServerAdmin [email protected]
ServerName name.com
ServerAlias www.name.com
DocumentRoot /var/www/name.com/public_html

这很好用。然后我创建了另一个包含www1.name.com文本的网站www1

我做的几乎一样,我创建一个文件夹/var/www1/name.com/public_html,在index.html其中复制上一个文件并进行更改

ServerAlias www1.name.com
DocumentRoot /var/www1/name.com/public_html

但当我访问 www1.name.com 时,我看到的是“Welcome”而不是“www1”。有人能帮我解决这个问题吗?

是的,我总是a2ensite/a2dissite这么做service apache2 restart

答案1

假设VirtualHost标签没有问题。这可能是因为ServerAlias如果没有,则不使用。在第二个中更改为ServerName后重试。ServerAliasServerNameVirtualHost

一个很好的提醒是设置ServerName名字并用于ServerAlias任何其他别名。

不过,如果您要使用另一个目录(/var/www 之外),请注意权限设置是否正确。此外,如果SELinux使用,需要为该目录​​设置适当的上下文。但除非您自行启用,否则这不是问题SELinux

答案2

澄清几个基本点:

  • 在 Ubuntu 中,/var/www是必须存储用户 Web 内容的默认目录。它/etc/apache2/apache2.conf由以下指令定义到全局 Apache 配置文件中:

    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  • VirtualHost 的名称与其目录名称之间没有直接联系DocumentRoot

  • 当该指令ServerName被放入其定义中 - 标签之间时,它定义通用服务器的名称或某个 VirtualHost 的名称<VirtualHost>

  • 为了有效的管理VHs,通常每个单独的VirtualHost的定义都放在单独的配置文件中。

  • ServerName每个 VirtualHost 都需要该指令。

  • 该指令ServerAlias不是必需的。我们可以将其视为可以输入一个或多个 同义词的地方ServerName

根据这些观点,我的建议如下:

  • 创建两个位于的单独目录/var/www,如问题中的示例所示,它们可以是:

    sudo mkdir -p /var/www/www.name.com/public_html
    sudo mkdir -p /var/www/www1.name.com/public_html
    
  • 为第一个 VirtualHost 创建配置文件:

    sudo nano /etc/apache2/sites-available/www.name.com.conf
    

    其内容应类似如下形式:

    <VirtualHost *:80>
        ServerName www.name.com
        ServerAlias name.com 
        ServerAdmin [email protected]
        DocumentRoot /var/www/www.name.com/public_html
        <Directory /var/www/www.name.com/public_html>
            Options None FollowSymLinks
            # Enable .htaccess Overrides:
            AllowOverride All
            DirectoryIndex index.html index.php
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    </VirtualHost>
    
  • 为第二个 VirtualHost 创建配置文件:

    sudo nano /etc/apache2/sites-available/www1.name.com.conf
    

    其内容应类似如下形式:

    <VirtualHost *:80>
        ServerName www1.name.com
        ServerAdmin [email protected]
        DocumentRoot /var/www/www1.name.com/public_html
        <Directory /var/www/www1.name.com/public_html>
            Options None FollowSymLinks
            # Enable .htaccess Overrides:
            AllowOverride All
            DirectoryIndex index.html index.php
            Order allow,deny
            Allow from all
            Require all granted            
        </Directory>
    </VirtualHost>
    
  • 如果需要,请禁用所有现有的VirtualHost的配置:sudo a2dissite "*.conf"

  • 启用新的配置文件:

    sudo a2ensite www.name.com.conf www1.name.com.conf
    
  • 重新启动Apache:

    • Ubuntu 14.04:sudo service apache2 restart

    • Ubuntu 16.04:sudo systemctl restart apache2.service

  • 将一些index.html页面放入public_html/文件夹中,并尝试通过浏览器访问这两个域(http://www...和)。http://www1...

相关内容