IPTables 端口重定向应该会破坏 Apache,但事实并非如此

IPTables 端口重定向应该会破坏 Apache,但事实并非如此

我在 Apache 中设置了负载平衡httpd

<VirtualHost *:80>
        DocumentRoot /var/www/html
        ServerName xxx.xxx.xxx.com
        ProxyRequests           Off
        ProxyPreserveHost       On
        ProxyPass / http://xxx.xxx.xxx.xxx:8080/
        ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/
</VirtualHost>

:8080tomcat运行在同一主机上的 Apache 应用服务器。我工作的地方有日志保留要求,所以我认为将所有内容都改为 apachehttpd将使事情变得非常适合分析。

我试图让所有公共请求通过端口 80,而不破坏最终用户可能拥有的任何链接或书签。我打算通过进行一些端口转换来做到这一点,以便所有内容看起来都像是通过端口 80 进入应用程序。在没有考虑上面的负载平衡的情况下,我在表中添加了以下规则nat

-A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j REDIRECT --to-ports 80

问题是,我可以通过httpd或直接访问该应用程序:8080。每条规则的数据包计数也在增加,因此显然它们正在匹配。

我的问题是这样的:为什么这没有创建无限循环?

看起来:8080请求会被转发到,httpd而请求本身会尝试通过遍历来检索它们:8080,因此循环将继续向前,直到我重新格式化我的新简历。

答案1

答案就在于-i eth0

即使您将 httpd 设置为连接到17.98.65.28,我认为这是 上的 IP eth0,流量实际上不会流过eth0,而是会使用lo

这样做的原因是,当路由到盒子本身拥有的任何 IP 时,流量会流过lo.您可以通过以下方式验证这一点:

ip route get 17.98.65.28

您将得到一条包含 的行dev lo,这告诉您将使用哪个接口将流量发送到该地址。

例如,在我的笔记本电脑上,我wlan010.252.28.62

$ ip route get 10.252.28.62
local 10.252.28.62 dev lo  src 10.252.28.62 
    cache <local> 

相关内容