2013-03-17 256 views
9

我在網上看到很多關於使用ProxyPreserveHost On來確保代理後端接收原始調用者的主機名的網頁。我正在使用它來收緊我的Web應用程序的安全性(Java,Tomcat),而如果我的日誌能夠顯示用戶的實際位置,它也會很好。我的Tomcat的日誌現在顯示此–好看不中用:ProxyPreserveHost似乎對我沒什麼作用

127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54 

這是我的配置,由於預期不明確無法正常工作:

「的/ etc// 000默認的Apache2 /啓用的站點 - 」

<VirtualHost *:80> 
ProxyPreserveHost On 
ProxyPass /webapp http://localhost:8080/webapp 
ProxyPassReverse /webapp http://localhost:8080/webapp 
RewriteEngine On 
RewriteRule ^/$   /webapp/frontend/app/ [proxy] 
RewriteRule ^/webapp/$  /webapp/frontend/app/ [redirect] 
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect] 

(從這裏開始,這是在000-default默認的東西)

啓用的模塊:

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod rewrite 

這是運行Apache HTTPD 2.2.22的Ubuntu 12.10。

您的幫助將不勝感激。

回答

10

我假設你的關心是你的訪問日誌在客戶端字段中仍然包含127.0.0.1。這不受ProxyPreserveHost的影響;這是連接到Apache的網絡端點的IP地址。對於來自其他服務器的代理連接,這將始終是localhost。

此外,ProxyPreserveHost是關於保留由客戶端發送的Host標頭,而不是保留客戶端的原始IP。換句話說,就是關於信息爲了你的目的走錯了方向;它保留了客戶端發送的服務器名稱,而不是客戶端的IP。

我認爲你的問題與this question相同。我會添加附加說明,您可以使用%{X-Forwarded-For}i配置在CustomLog配置中,在日誌中記錄X-Forwarded-For標頭。

+0

謝謝。您提到的問題有一個投票答案,該鏈接指向Stack Overflow之外的一篇文章,該文章實際上將「ProxyPreserveHost」作爲一個解決方案「,因此開發人員不必最終使用」X-Forwarded-For「頭文件」 。我是這樣的開發人員,我覺得不得不使用非標準的東西。說,我搜索了'X-Forwarded-For',甚至維基百科都把它作爲_de facto_標準,這比我最初認爲的要好得多(Apache HTTPD特定的東西,使我的Web應用程序Apache HTTPD特定) 。 – 2013-03-18 04:14:12

+0

我認爲這個鏈接的博客文章是寫得很混亂。他說這個指令可以用來保存「遠程主機而不是遠程ip」。在正常情況下,對於同一事物,這些名稱可能是兩個不同的名稱(通過DNS),但我認爲「遠程主機」實際上是指「遠程客戶端發送的主機頭」,而不是遠程客戶端的主機名。但事實上,正如所寫的那樣,它相當混亂。 – rra 2013-03-18 04:37:27

+0

除了對WebAuthenticationDetails.getRemoteAddress()的現有檢查之外,我繼續檢查了'HttpServletRequest.getHeader(「X-Forwarded-For」)的返回值。因此,我的應用程序現在是「X-Forwarded-For」。不是我最初希望的,但仍然工作。謝謝。 – 2013-03-18 05:02:49

相關問題