我确信这是我应该已经理解的事情,但我发现自己很困惑。
游戏中的配置加起来如下:
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
来测试通配符,看看是否导致了问题。