为何访问Apache2服务器外部IP时会指向自定义站点而非默认站点?
为何访问Apache2服务器外部IP时会指向自定义站点而非默认站点?
嗨,我来帮你拆解这个问题~
首先得搞懂Apache虚拟主机的匹配逻辑:当你用<VirtualHost mysite1.com:80>这种指定具体域名+端口的方式定义虚拟主机时,它的匹配优先级会比<VirtualHost *:80>这种通配符的更高。而当你通过外部IP访问时,请求的Host头是你的外部IP地址,这时候Apache找不到完全匹配这个Host的虚拟主机,就会把第一个加载的、端口符合的虚拟主机作为默认返回——刚好你的mysite1.com虚拟主机在加载顺序上比000-default.conf更早,所以就被“误匹配”了。
解决办法
按照@Daniel Ferradal提供的方案,调整你的虚拟主机配置即可:
- 把所有虚拟主机的
<VirtualHost>块都改成通配符格式*:80 - 用
ServerName指令来做具体的域名映射
举个例子:
默认站点配置(000-default.conf)
<VirtualHost *:80> ServerName _default_ # 保留你原来的默认站点配置内容,比如DocumentRoot之类的 </VirtualHost>
自定义站点配置(mysite1.com的配置文件)
<VirtualHost *:80> ServerName mysite1.com # 保留你原来的mysite1站点配置内容 </VirtualHost>
这样配置后,Apache就会严格根据请求的Host头来匹配:
- 当请求的Host是
mysite1.com时,会指向你的自定义站点 - 当请求的Host是外部IP或者其他未配置的域名时,就会匹配到设置了
ServerName _default_的默认站点,完全符合你的需求~
备注:内容来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

