Tomcat 服务器配置 ( server.xml
) 默认启用了 AJP 连接器。因此,tomcat 默认监听端口8009
。
为什么默认启用此功能?
我认为只有少数人会使用 Apache 作为反向代理,或者我们应该始终使用 Apache 作为前端(Web 服务器),而只将 tomcat 用于 servlet 和 JSP 页面?
答案1
通常会在应用服务器前面放置功能更全面的 Web 服务器,尤其是用于提供静态内容和定义重定向/重写。一般来说,最好尽量减少对应用服务器后端的依赖。AJP 连接器针对此特定用例进行了更优化,因为它通过优化的二进制传输传输代理流量。
如果您不打算使用连接器,请随意将其注释掉,并且如果一切运行正常,也不必改变生产环境来利用 AJP。我做似乎记得在使用 AJP 而不是 HTTP 代理时可能会遇到一些不太明显的 httpd 配置问题。不幸的是,距离我上次担任 Tomcat 管理员已经过去了几年,所以我无法提供具体细节。
如果您觉得服务器管理员不愿意让应用服务器处理超出必要数量的连接,那您就错了。有几个原因已被多次证实:
- 性能。专用网络服务器软件通常优化得更好致力于从文件系统中传递静态内容。他们的多任务实现几乎完全致力于此。这对您来说可能看起来并不是很大的节省,但当您开始每秒处理数千个请求时,这种开销就会有所不同。
- 需要跟踪的状态更少。Web 应用服务器需要跟踪的内存状态要多得多。专用 Web 服务器的每个请求占用的内存通常要少得多,而且该状态大多是一次性的:子进程在完成请求服务后经常被回收。每次应用需要提供文件服务时,执行面向连接的代码也没有什么意义。(有意或无意地会出现粗心的代码)
- 进程隔离。这比大多数人意识到的要重要得多。如果您的 Web 应用容器发生故障(通常是 Java 堆耗尽),则故障程度会降低。如果您的企业还没有准备好购买一套良好的负载平衡器来自动将故障的 Web 应用从服务池中拉出,那么这一点尤其重要。
简而言之,管理员试图避免“过度复杂化”,不让应用服务器处理他们不需要的任务。他们似乎在制造事情更多的通过增加一层额外的流程,情况会变得更加复杂,但实际上,这样才能取得最好的结果。