
我們使用一項服務,該服務為每個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。
ETC。
有其他人必須處理這個問題嗎?後備解決方案是在 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,因為 apache 負責「應用程式」等級。