Apache 提供错误的 VirtualHost

Apache 提供错误的 VirtualHost

我想向你展示一些非常奇怪的事情,是在装有 Apache 的 Centos7 服务器上发现的httpd

如果我从同一台机器访问一个域,我将获得正确的虚拟主机的服务:

wget http://foo-test.cloud -O -

-> Welcome in Foo Test.cloud!

无论如何,如果我从 WAN 访问同一个域,我就会受到错误的虚拟主机的服务:

wget http://foo-test.cloud -O -

-> Welcome in awesome.com!

这是 Apache 从我的配置文件中理解的内容(的输出httpd -S):

# httpd -S
VirtualHost configuration:
*:80                   is a NameVirtualHost
         default server ewm-dummy-default
         port 80 namevhost dummy-default
         port 80 namevhost awesome.com
         port 80 namevhost foo-test.cloud

如您所见,奇怪的是域名是正确的,并且默认网站不是这些域名之一。

到底是什么呢?我愿意接受任何建议。


笔记:

  • 从本地主机访问时,服务器将打印访问日志行
  • 从互联网访问时,服务器不会打印任何日志行

补充笔记:

  • 我进行了测试tcpdump,在两种情况下我都能够看到对端口 80 的传入请求。两者都具有正确的Host:HTTP 标头。
  • 我看到的过程在httpd聆听:::80netstat

任何想法?

谢谢你!

答案1

如果你遇到这种奇怪的情况:

  • tcpdump查看端口上的传入连接:80,没有遗漏任何内容
  • Apache 正在监听端口:80大量日志一些传入请求

请检查您的iptables规则。就我而言,我遇到了这种情况:

# iptables -t nat -L -n -v

 3418  150K REDIRECT   tcp  --  eth0   *       0.0.0.0/0            10.0.1.4             tcp dpt:80 redir ports 8080

因此,似乎在此 Web 服务器(即10.0.1.4)上设置了一个低级旧式端口转发,从一个端口:80到另一个端口:8080,以公开 Tomcat Web 服务器。删除该旧式 iptable 规则可解决该问题。

这就是 Apache 没有记录某些内容的原因:Apache 有时无法通过其端口访问。

故障排除可能并不容易,因为 Apache 的目的通常是充当其他内部 Web 服务器的前端 Web 服务器,因此您可能无法仅从响应主体中区分一个 Web 服务器与另一个 Web 服务器,因为它们的响应有时应该是相同的。

还要注意,来自 localhost 的连接可能来自与::1该 iptables 规则不匹配的 IPv6 环回接口 ()。这就是行为不同的原因。

希望这可能对其他人有用,以节省解决非常奇怪的问题的时间,简短的回答是:查看遗留的 iptable 规则。

相关内容