Linux

如何設置 apache+mod_proxy 以便當我連接到介面 X 上的 mod_proxy 時,它會在該特定介面上發送流量?

  • September 21, 2010

我們使用一項服務,該服務為每個 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,每個 apache 只綁定到自己的介面,但仍然通過 66.249.90.104 發送出站請求。

我希望它能夠按如下方式工作:

我連接到 66.249.90.108 並發出代理請求,它的輸出為 66.249.90.108。

我連接到 66.249.90.107 並發出代理請求,它以 66.249.90.107 的形式發出。

等等。

有沒有其他人不得不處理這個問題?備份解決方案是只在 5 個單獨的盒子上執行 apache,但我希望它全部在一個盒子上執行。

謝謝!

似乎 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 實例並匹配不同的規則。

引用自:https://serverfault.com/questions/152315