为什么Tomcat默认启用了ajp连接

Tomcat服务器configuration( server.xml )默认启用AJP连接器。 所以默认tomcat8009端口监听。

为什么这是默认启用?
我以为只有很less人会使用Apache作为反向代理,或者我们应该使用Apache作为前端(web服务器),并保持tomcat只用于servlet和JSP页面?

在应用程序服务器之前放置一个function更强大的Web服务器是很常见的,特别是提供静态内容和定义redirect/重写。 作为一般规则,最好将应用程序服务器后端的依赖关系数量减到最less。 AJP连接器针对此特定用例进行了更优化,因为它通过优化的二进制传输来传输代理stream量。

如果你不打算使用它,可以随意评论这个连接器,如果事情能够正常工作的话,就不要被迫改变你的生产环境来利用AJP。 我似乎回想起了一些不太明显的httpdconfiguration问题,可以在代理AJP而不是HTTP时运行。 不幸的是,自从我上一个Tomcatpipe理员已经有几年了,所以我不能提供具体的细节。

如果服务器pipe理员似乎对让应用程序服务器处理更多连接而不是绝对必要的过敏,那么您就不会错。 有几个时间certificate了这个原因:

  • 性能。 专用的networking服务器软件通常会更好地优化从文件系统提供静态内容。 他们的多任务实现几乎完全致力于此。 这对您来说似乎不是什么大的节约,但是当您每秒开始处理数以千计的请求时,开销会有所不同。
  • 较less的状态要跟踪。 Webapp服务器负担更多,他们需要跟踪他们的内存状态。 对于专用networking服务器,每个请求的内存占用量通常要小得多,而且这种状态大多是一次性的:当完成服务请求时,subprocess经常被回收。 每次应用程序需要为文件提供服务时,执行面向连接的代码也是毫无意义的。 (草率代码有意或无意地发生)
  • 过程隔离。 这比大多数人意识到的要大得多。 如果您的web应用程序容器出现故障(通常是Java堆耗尽),则破坏的程度会降低。 如果您的业务尚未获得资金支持一系列能够自动将出现故障的Web应用程序从服务池中取出的负载平衡器,那么这一点尤其重要。

简而言之,pipe理员通过不让应用服务器处理他们不需要的任务来避免“复杂化”的事情。 看起来他们似乎正在通过站起来一层额外的stream程使事情变得更加复杂,但是在实践中,事情是这样做的。