Apache2 VirtualHosts 403 异常

Apache2 VirtualHosts 403 异常

我确信这是我应该已经理解的事情,但我发现自己很困惑。

游戏中的配置加起来如下:

NameVirtualHost *:80
Listen 80

<VirtualHost *:80>
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName domain.tld
    ServerAlias *.domain.tld
    DocumentRoot /var/www/domain.tld
    <Directory /var/www/domain.tld>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

DNS 工作正常。

问题是,http://*.domain.tld/ 的每个变体(包括http://域名.tld/)正常工作,除了http://www.domain.tld/抛出 403。

日志状态:服务器配置拒绝客户端:/etc/apache2/htdocs

如果我从播放中删除第一个 VirtualHost 块,则一切都按预期进行,包括http://www.域名.tld。这使我相信,出于某种原因,Apache 没有考虑 www.domain.tld 来匹配第二个 VirtualHost 块,因此退回到拒绝所有内容。

这似乎不对。第二个块不应该匹配 www.domain.tld 吗?


我已经能够解决这个问题,但我仍然不明白为什么。在我最初的配置中,我使用的是服务器的真实 IP 地址,而不是 *。将所有实例切换为 *(如上所示)可使一切按预期工作。

这与浏览器请求资源的方式有关吗?

答案1

我会避免使用通配符来www记录。

改变这个:

ServerName domain.tld

ServerAlias *.domain.tld

对此:

ServerName www.domain.tld

ServerAlias domain.tld subdomain.domain.tld etc.domain.tld

看看是否有效。调用服务器名称www.domain.tld来测试通配符,看看是否导致了问题。

相关内容