2009-09-24 96 views
0

在生產中,我們在apache後面運行tomcat,在開發中裸露的tomcat。 如何知道Servlet類內部是否在Apache後面運行?如何知道tomcat是否在Apache後面運行?

+0

如果添加的,而不是回答這個問題_why_要做到這一點,我們也許可以幫助您解決問題,... – Tim 2009-09-24 12:08:24

+0

你可以有阿帕奇添加自定義HTTP標頭。我相信這很容易。現在,假設您可以控制您的生產環境 - 正如下面的一位評論者指出的,如果您不這樣做,標頭可能會丟失。 – MJB 2011-04-25 17:14:58

回答

2

這取決於你的Apache是​​如何談論到Tomcat。

如果它通過HTTP(mod_proxy的)連接,您可以檢查request.getRemoteAddr()。它將是Apache的IP,可能是您的內部IP。您也可以選擇「Via」標題來查看Apache是​​否在那裏。

如果通過AJP(mod_jk/mod_proxy_ajp)連接,則可以檢查request.getLocalPort()以查看它是否是JK連接器的端口。

2

如果這是開發和生產環境之間的區別,那麼你可能會被具有這完全在你的控制,而不是臨時猜測(這最終將會被突破)更好。

這可能是「是否在JNDI中設置了功能X?」或者「將屬性foo.bar設置在c:/ourproject.properties中」。你不應該依賴像「從文件中加載的類X或在jar中找到的類」(因爲如果你改變應用程序服務器會中斷)或者「是否存在http標題行X」這樣的工件,因爲它不在你的控制範圍之內,如果其他人使用Apache作爲前端加速器,可能會中斷。

因此,明確的配置 - 它可以很容易地完成:)

相關問題