我在带有虚拟主机的 Debian 机器中配置了 Apache2。我有几个域指向该机器的 IP 地址。配置了虚拟主机的域运行正常。但如果我在浏览器中输入指向该机器但未配置虚拟主机的域,我会得到该机器中另一个域的随机虚拟主机。不是随机的,而是虚拟主机之一(始终相同),但我不知道为什么是它。正确的说法应该是未配置为虚拟主机的域返回主机名错误或其他错误,对吗?
有人知道如何解决这个问题吗?
我的一个虚拟主机配置文件:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName dl.domain.com
DocumentRoot /var/www/dl.domain.com/public_html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/dl.domain.com/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
我的 apache2.conf
http://www.speedyshare.com/files/29107024/apache2.conf
谢谢您的帮助
答案1
示例配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
定义的第一个虚拟主机将作为默认主机。
http://httpd.apache.org/docs/2.2/vhosts/name-based.html#using
如果您希望对与任何特定虚拟主机不匹配的请求进行特殊配置,只需将该配置放入容器中并在配置文件中首先列出它。
“正确的答案是未配置为虚拟主机的域名会返回主机名错误或其他错误,对吗?”
如果您确实想要此行为,只需创建虚拟主机,将其放在所有其他 VirtualHost 条目之前并指向空文件夹。如果没有要提供的文档,它将出现 403 错误。
答案2
为了帮助调试此类问题,运行“apache2ctl -s”[1] 将显示 apache 如何匹配 vhosts 以及匹配的顺序。
[1]: apache2ctl 在某些发行版中可能被命名为 apachectl