如何設置 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,每個 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 實例並匹配不同的規則。