2013-11-22 48 views
2

我想要完成以下任務:我想在筆記本上請求的所有網站之上顯示任務欄。在這個酒吧我顯示各種信息。Apache服務器作爲使用iptables的代理

我在我的網絡中有一個樹莓派,我在筆記本上配置爲網關。所以我筆記本上的所有流量都通過了覆盆子。在樹莓上,我用兩個VirtualHosts安裝了一臺Apache服務器。一個是監聽端口的本地網絡服務器。對於另外一個,監聽端口,我有以下規則:

  1. 如果沒有特殊參數在請求中設置,我將請求重定向到一個本地頁面(與原來的要求URI作爲參數)。在這個頁面上,我有一個iframe,用於顯示最初請求的頁面,使用從參數中讀取的URI。爲避免產生無限循環,我將特殊參數添加到iframe中的鏈接。這部分工作正常。

  2. 如果特殊參數沒有設置(因爲頁面應該是在iframe顯示),我利用重定向mod_rewrite的* *再次請求最初請求的頁面。這種重定向似乎會導致問題。

所以這裏是我在做什麼一些代碼: 我重定向端口所有流量使用iptables端口。 192.168.1.1是我使用我的樹莓的IP地址,因爲我無法重定向到PREROUTING階段的環回接口。我這樣做有以下的iptables規則:

iptables -t nat -A PREROUTING -i eth0 -p tcp 80 -j DNAT 192.168.1.1:8126

我煮了我的問題,爲Apache服務器,在這裏我簡單地重定向到一個外部網站的所有請求以下的虛擬主機配置:

<VirtualHost *:8126> 
     RewriteEngine On 
     RewriteRule ^/?(.*) http://example.com/ [P] 
     ProxyPassReverse/http://example.com/ 
</VirtualHost> 

在我的筆記本上,我將網關設置爲192.168.1.1,打開我的Chrome瀏覽器併發送HTTP請求至eg test.com。我期望重定向到example.com。但我收到一條錯誤消息說

ERR_TOO_MANY_REDIRECTS

沒有任何人有一個想法,我怎麼能解決這個問題?我有完全不同的方法解決我的問題是免費的!

回答

0

您的iptables規則會創建一個循環,以使來自代理的請求再次發送給自己。

您應該避免通過從規則排除代理源IP:

iptables -t nat -A PREROUTING -i eth0 -s ! <Your proxy IP> -p tcp 80 -j DNAT 192.168.1.1:8126 
相關問題