Apache 不遵守特定站点的 ServerName 指令

Apache 不遵守特定站点的 ServerName 指令

我使用 Apache 将一些站点配置为 VirtualHosts,这些站点已经运行良好一段时间了。我最近将服务器的主机名更改为正在提供服务的域名之一,并将其​​添加到指向服务器外部 IP 地址的 /etc/hosts 中。

自从我这样做之后,从我的笔记本电脑访问域名就会转到 Apache 的默认“它起作用了!”页面。如果我从 /etc/apache2/sites-enabled/ 中删除 000-default,它会显示正确的站点。尝试访问带有“www.”前缀的站点,无论 000-default 是否在 sites-enabled 中,我都会转到正确的站点。

基于所有这些,我猜测默认配置会提供默认页面,因为我已配置了主机名或 /etc/hosts(或两者),但我不知道如何在保留这些设置的情况下禁用它。欢迎提出任何建议!

编辑-我当前的 VirtualHost 配置如下所示:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin [email protected]

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

总结一下:我设置了多个 VirtualHost,但只有这个无法正常工作。我可以访问http://www.domain.com很好,但是http://域名.com带我进入 Apache 的默认“它有效!”页面。如果我禁用 000-default 配置,它会显示正确的页面。只有在我将服务器的主机名设置为 domain.com 并在 /etc/hosts 中添加一行将 domain.com 指向服务器的外部 IP 地址后,才会出现这种情况。如果可能的话,我想保留这些内容。

编辑:我运行apache2ctl -S后,/usr/sbin/apache2 -S系统提示“apache2:错误的用户名 ${APACHE_RUN_USER}”。输出如下:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK

答案1

前几天丢了这个问题。

如果您有一个没有 ServerName 组件的 <VirtualHost> 容器,它将使用默认主机名。由于 000-default 可能没有 ServerName 组件,并且是按字母顺序第一个包含的,因此它回答 hostname.com 并且不允许您明确声明的主机名工作。

答案2

您在某处有 NameVirtualHost *:80 指令吗?

尝试:

/usr/sbin/apache2 -S

这将告诉您 Apache 如何解析配置文件。您的配置是否具有实际 IP 或所有配置都带有 *?您是否缺少 :80?Apache 不喜欢混合这些。

您的默认 ServerName 是否为 domain.com 或 ServerAlias 是否为 domain.com?

答案3

检查 VirtualHost 指令中的 ServerName 和 ServerAlias:

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

读:http://httpd.apache.org/docs/2.2/mod/core.html#serveraliashttp://httpd.apache.org/docs/2.2/vhosts/

答案4

我遇到了类似的问题,我通过在主 httpd.conf 文件中明确设置 ServerName 来修复它,而不是让 apache 自动找出它。我假设 apache 决定的内容与我的 vhost(稍后定义)相同,因此默认的“获胜”,覆盖了 vhost 设置。

我只是将 httpd.conf ServerName 设置为该机器拥有的主机名,我永远不会为其提供网页。

相关内容