2011-09-10 68 views
2

Servlet規範,Tomcat或Wicket中是否有任何內容允許在mod_proxy後面運行的webapp確定的非代理URL代理服務器後面的servlets:獲取未經代理的URL

我們需要發送帶有鏈接的電子郵件。我一直在使用檢票以下位來構造URL來在應用程序的特定頁面:

String relURL = RequestCycle.get().getRequest().getRelativePathPrefixToWicketHandler(); 
RequestUtils.toAbsolutePath(relURL); 

由於電子郵件不回去了通過代理服務器,當然網址,不要重新編寫,最後看起來像http://localhost/...

現在我可以做的最好的事情就是將URL鏈接到我們的生產服務器,但是這使我們在開發/測試機器上運行時遇到了一些調試頭痛問題。

使用InetAddress.getLocalHost().getHostName()並不是一個真正的解決方案,因爲這很可能會返回prod1.mydomain.com或其他請求,而不是mydomain.dom,請求可能來自該請求。

回答

5

至於回答的問題Retain original request URL on mod_proxy redirect

如果你正在運行的Apache> = 2.0.31,那麼你可以嘗試設置ProxyPreserveHost指令 如here所述。

這應該傳遞原始主機頭槽的mod_proxy到您的 應用程序,通常請求URL會重新出現(在 你的Servlet容器)使用主機頭,所以架構位置 應該是建立一個使用主機以及代理之前的「路徑信息」。

3

Servlet規範,Tomcat或Wicket中有什麼可以讓mod_proxy後面運行的webapp來確定請求的非代理URL嗎?

否。如果反向代理在傳遞消息頭之前未將所需信息放入消息頭中,則無法恢復它。

您需要查看Apache Httpd文檔以瞭解如何讓前端將所需的信息放入HTTP請求標頭中。 (這是可以做到我只是不記得細節。)

+0

僅供參考:有關如何配置mod_proxy的說明也可以在[tomcat documentation](http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html)中找到。 – home

相關問題