我在網上看到很多關於使用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。
您的幫助將不勝感激。
謝謝。您提到的問題有一個投票答案,該鏈接指向Stack Overflow之外的一篇文章,該文章實際上將「ProxyPreserveHost」作爲一個解決方案「,因此開發人員不必最終使用」X-Forwarded-For「頭文件」 。我是這樣的開發人員,我覺得不得不使用非標準的東西。說,我搜索了'X-Forwarded-For',甚至維基百科都把它作爲_de facto_標準,這比我最初認爲的要好得多(Apache HTTPD特定的東西,使我的Web應用程序Apache HTTPD特定) 。 – 2013-03-18 04:14:12
我認爲這個鏈接的博客文章是寫得很混亂。他說這個指令可以用來保存「遠程主機而不是遠程ip」。在正常情況下,對於同一事物,這些名稱可能是兩個不同的名稱(通過DNS),但我認爲「遠程主機」實際上是指「遠程客戶端發送的主機頭」,而不是遠程客戶端的主機名。但事實上,正如所寫的那樣,它相當混亂。 – rra 2013-03-18 04:37:27
除了對WebAuthenticationDetails.getRemoteAddress()的現有檢查之外,我繼續檢查了'HttpServletRequest.getHeader(「X-Forwarded-For」)的返回值。因此,我的應用程序現在是「X-Forwarded-For」。不是我最初希望的,但仍然工作。謝謝。 – 2013-03-18 05:02:49