我想向您展示一些非常奇怪的东西,它是在带有 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
如您所见,奇怪的是域名是正确的,并且默认网站不是这些域之一。
可能是什么鬼?我愿意接受任何建议。
笔记:
- 从 localhost 访问时,服务器会打印访问日志行
- 从 Internet 访问时,服务器不打印任何日志行
补充说明:
- 我进行了测试,
tcpdump
并且在这两种情况下都能够看到对端口 80 的传入请求。两者都具有正确的Host:
HTTP 标头。 - 我看到了
httpd
听:::80
的过程netstat
任何想法?
谢谢!
因此,如果您遇到这种奇怪的情况:
tcpdump
看到端口上的传入连接:80
,没有任何遗漏:80
很多记录一些传入的请求请检查您的
iptables
规则。就我而言,我遇到了这种情况:所以似乎在这个网络服务器(即)上设置了一个从端口到端口
10.0.1.4
的低级遗留端口转发,以公开一个 Tomcat 网络服务器。删除旧的 iptable 规则解决了这个问题。:80
:8080
这就是 Apache 没有记录某些内容的原因:Apache 有时无法通过其端口到达。
故障排除可能并不容易,因为 Apache 的目的通常是充当其他内部网络服务器的前端网络服务器,这就是为什么仅从响应正文中您可能无法将一个网络服务器与另一个网络服务器区分开来,因为它们的响应有时应该是一样的。
另请注意,来自 localhost 的连接可能来自
::1
与该 iptables 规则不匹配的 IPv6 环回接口 ( )。这就是为什么不同的行为。希望这可能对其他人有用,以节省解决非常奇怪的问题的时间,简短的回答是:查看遗留的 iptable 规则。