我是否需要为 www.example.com 和 example.com 设置 2 个虚拟主机?

我是否需要为 www.example.com 和 example.com 设置 2 个虚拟主机?

我有 2 个问题 - Apache conf 文件中的 ServerName 是否以 www 开头有关系吗?此外,如果我有以下虚拟主机:

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

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我还应该有以下内容:

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

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

答案1

阿帕奇ServerName指令用于 Apache 生成的默认(错误)消息和标头等。有些人喜欢让它们与网站访问者使用的主机名相匹配。

然后,您需要为每个 URL 主机名提供一个 VirtualHost。

其他人更喜欢较少的 VirtualHost 块并使用ServerAlias指令为虚拟主机分配备用名称(当所有名称都可以使用相同的内容时)。

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

据我所知,您使用哪个名称作为 ServerName 主要取决于个人喜好。有些人喜欢裸域名,而其他人则喜欢 www 记录。

而且,正如 @HåkanLindqvist 所评论的,您还可以决定使用单个 URI 来发布您的网站并将您的其他域名重定向到该网站:

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

<VirtualHost *:80>
    ServerName example.com
    Redirect "/" "http://www.example.com"
</VirtualHost>

(需要注意的是,您应该为您的网站设置 TLS 证书并使用并重定向到 HTTPS。)

相关内容