![Iptables 和 NAT 保留原始目标 IP?](https://linux22.com/image/804554/Iptables%20%E5%92%8C%20NAT%20%E4%BF%9D%E7%95%99%E5%8E%9F%E5%A7%8B%E7%9B%AE%E6%A0%87%20IP%EF%BC%9F.png)
我有一台面向 Web 的服务器,我已将其拆分成多个客户机,其中一个运行 Apache,并带有一些非常基本的虚拟主机配置。我已启用重定向,但我的虚拟主机配置需要原始目标来确定请求应命中哪组页面,因此我只看到默认服务器页面。
目前,我的 iptables 规则如下:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.10.2:80
有什么指点吗?
问题是,任何到此框的 http(s) 流量都被路由到默认页面集,而不是适合最初请求的域的页面。
虚拟主机配置中的相应部分:
#
# The document root + CGI-directories.
#
VirtualDocumentRoot /srv/%0/public/htdocs/
VirtualScriptAlias /srv/%0/public/cgi-bin/
(是的,这些路径确实存在 - 我已经从我正在替换的 apache 框中拉出了 /srv/,并保留了所有者/权限/等等!)
答案1
对于虚拟主机,Apache 不使用服务器的 IP 地址(除非使用基于 IP 的虚拟主机,我猜您不是)来确定要显示哪个网站,因此检查 IPtables 规则不会产生任何结果。相反,Apache 会检查 http 请求中的主机字段,并使用它来决定要显示哪个虚拟主机。很可能是您的 Apache 配置有问题,而不是 IPtables。
编辑您的问题以包含您的虚拟主机配置块。