2009-09-24 83 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作为前端加速器,可能会中断。

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

相关问题