2012-10-15 182 views
0

我已配置apache(2.4版)反向代理在我們的網站上發佈安裝在內部服務器中的應用程序。一切工作正常,這些都是我在代理html.conf添加行:Apache反向代理與mod_remoteip

ProxyPass /app/bpv0SOCPOkqptPqO6XsIvucLzO7QXJyA/ http://srvacg:9081/acgv4/ 

如果我寫這篇文章的網址http://www.mysite.com/app/bpv0SOCPOkqptPqO6XsIvucLzO7QXJyA/我可以在我的內部應用程序登錄,我可以使用它。

問題是我的應用程序檢查客戶端的IP地址,並在同一時間只允許1個連接。在配置了反向代理的情況下,所有連接都使用安裝apache的服務器的私有IP完成。

我試圖能夠mod_remoteip來解決這個問題:

RemoteIPHeader X-Forwarded-For 

但結果總是相同的。這是Apache的訪問日誌:

REMOTE-IP: %a - LOCAL-IP: %A | X-Forwarded-For: %{X-Forwarded-For}i | h: %h | UNDERLYING CLIENT IP: %{c}a | 

REMOTE-IP: 217.57.XXX.XXX - LOCAL-IP: 192.168.89.3 | X-Forwarded-For: 217.57.XXX.XXX | h: 217.57.XXX.XXX | UNDERLYING CLIENT IP: 217.57.XXX.XXX | 

217.57.XXX.XXX是客戶端IP,192.168.89.3是內部IP,並是我的應用程序接收到的IP。我無法知道它是如何得到這些信息的。

有人可以幫我嗎?

+0

也許你可以簡單地擴展你的應用程序的這種情況?如果存在X-Forwarded-For頭,請檢查該IP地址,而不是正常的請求IP? – arkascha

+0

Arkasha,對不起但我不能,應用程序是一個管理軟件,我不能把它放在它!謝謝 – fonta7

+0

好吧,無論「管理軟件」是什麼,我明白你無法修改它的行爲細節。通過初始化客戶端地址來替換代理服務器的IP地址是不可能的,雖然它可能能夠僞造(或「構建」)這樣的包:希望你的防火牆會阻止這樣的請求,因爲它們似乎來自外部IP地址... – arkascha

回答

1

如果您不能根據您的要求修改該應用程序,那麼也許您可以包裝它?

如果你可以安裝一個額外的應用程序,一個簡單的包裝器,不過是一個簡單的腳本,你可能能夠構造一個解決方法:配置代理服務器將所有請求轉發給該包裝器,而不是「真正的」內部應用。然後,包裝器可以代表代理服務器發出內部請求,以代理(或客戶端)完成的方式請求「真實」應用程序並轉發回覆。優點:您可能能夠構建似乎源自原始遠程客戶端ip的請求,該包裝器可以將其視爲代理服務器添加的附加頭。由於從包裝器到'真實'應用程序的請求是系統內部的,所以沒有軟件包通過網絡移動,所以沒有任何東西可以被防火牆阻止。

我沒有嘗試這一點,但它可能是一個解決辦法...

0

由於種種原因,mod_remoteip不適合我的實施工作。

相反,如Apache 2.4,我測試發現這個工作。

對於的httpd.conf嘗試搜索在那裏< IfModule log_config_module >所在的部分並更換的CustomLog聲明這些:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy 
CustomLog "logs/access.log" proxy 

的LogFormat語句創建一個名爲代理自定義日誌格式利用代理轉發的環境變量X-Forwarded-For作爲來自真實客戶端的遠程IP地址的來源。

CustomLog聲明只是使用自定義日誌格式「代理」將結果寫入「訪問」。日誌「,而真正的IP地址現在出現。

+0

我也遇到麻煩讓mod_remoteip工作,但我終於弄明白了,我在這裏發佈它:http:// stackoverf low.com/questions/25455731/getting-apache-2-4-access-logs-to-show-client-ip-instead-of-127-0-0-1-with-varni – curiouser