我如何设置 apache+mod_proxy,以便当我连接到接口 X 上的 mod_proxy 时,它会通过该特定接口发送流量?

我如何设置 apache+mod_proxy,以便当我连接到接口 X 上的 mod_proxy 时,它会通过该特定接口发送流量?

我们使用一项服务,该服务为每个 IP 分配 X 个请求,并允许我们设置具有此类限制的 5 个 IP(我知道... 他们不能将一个 IP 的限制提高 5 倍,这看起来很愚蠢)。

假设我有一个 Linux 机器,其互联网地址为:66.249.90.104 - 这是 Google IP,不是我的...所以请随意尝试入侵它 :)

我将 apache+mod_proxy 设置为转发代理(ProxyRequests On)。即,您可以将 Firefox 设置为使用 66.249.90.104:8080 作为代理,并且所有 Firefox 流量都以 66.249.90.104 的形式传出。

到目前为止,一切都很好。

问题:
现在我添加更多别名接口,因此总数如下所示:

eth0:66.249.90.104
eth0:1 66.249.90.105
eth0:2 66.249.90.106
eth0:3 66.249.90.107
eth0:4 66.249.90.108

我运行 apache+mod_proxy(单个 apache 实例),它绑定到所有接口,但无论我连接哪个地址使用转发代理,所有流量都会以 66.249.90.104 的形式流向互联网

我也尝试运行 5 个不同的 apache,每个只绑定到自己的接口,但仍然通过 66.249.90.104 发送出站请求。

我希望它按如下方式工作:
我连接到 66.249.90.108 并发出代理请求,它以 66.249.90.108 发出。
我连接到 66.249.90.107 并发出代理请求,它以 66.249.90.107 发出。
等等。

有其他人遇到过这个问题吗?后备解决方案是在 5 个单独的盒子上运行 apache,但我希望它全部在一个盒子上运行。

谢谢!

答案1

看来 mod_proxy 在打开套接字时没有选择源 IP 的选项。但是,您可以使用 iptables 将来自用户的流量 SNAT 到地址池。

iptables -A POSTROUTING -m owner --uid-owner httpd -j SNAT --to-source 66.249.90.104-66.249.90.108

IIRC 它将通过池进行分配,每个连接都会被映射,因此应该均匀分配。如果您确实需要控制哪些请求发送到哪里,您可以尝试在不同用户下运行多个 apache 实例并匹配单独的规则。

答案2

查看 Linux 高级路由和流量控制 HOWTO,特别是页面。也许您想将路由留给了解该情况的内核,而不是留给负责“应用程序”级别的 apache。

相关内容