我们使用一个服务,每个IP分配给我们一定数量的请求,并且允许我们设置5个具有这种限制的IP(我知道,似乎很愚蠢,他们不能在一个IP上限制5倍的限制)。
假装我有一个在互联网上有以下地址的Linux机器:66.249.90.104 – 这是一个谷歌的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实例),但不pipe我连接哪个地址来使用转发代理,所有stream量都以66.249.90.104
我也试过运行5个不同的apach,每个绑定到它自己的接口,但仍然通过66.249.90.104发送出站请求。
我希望得到它的工作如下:
我连接到66.249.90.108,并作出代理请求,它出去了66.249.90.108。
我连接到66.249.90.107,并作出代理请求,它出去了66.249.90.107。
等等
有没有其他人不得不处理这个问题? 后退解决scheme将是在5个独立的盒子上运行Apache,但我更喜欢它在一个盒子上工作。
谢谢!
看来mod_proxy在打开套接字时没有select源IP的选项。 但是,您可以使用iptables来SNAT从用户到地址池的stream量。
iptables -A POSTROUTING -m owner --uid-owner httpd -j SNAT --to-source 66.249.90.104-66.249.90.108
IIRC它将通过每个连接映射到池中进行分配,所以事情应该平分。 如果你真的需要控制哪些请求去哪里,你可以尝试在不同的用户下运行多个apache实例,并使用单独的规则进行匹配。
看看Linux高级路由和stream量控制HOWTO,特别是在这个页面。 也许你想离开路由到知道它的内核,而不是apache,它正在照顾“应用程序”级别。