Apache httpd和Tomcat如何协同工作?

2022-09-04 02:15:08

我正在继承一个涉及Java Web应用程序的项目,其后端由Apache httpd / Tomcat组合提供支持。Web服务器用于回馈JS,静态内容并执行一般负载平衡,而Tomcat则通过单个WAR文件提供JSP。

我将在今天晚些时候或明天获得对代码库的访问权限,但我想尝试提前做一些研究。

我的问题可以概括为:这两者如何协同工作?

  • 谁首先收到 HTTP 请求?
  • httpd如何知道何时将JSP请求转发到Tomcat,或者只是响应请求本身?
  • httpd 如何将请求“传递”到 Tomcat,以及如何“接收”来自 Tomcat 的响应?它是否只是“复制粘贴”对Tomcat正在侦听的端口的请求/响应?是否有某种操作系统级别的进程间通信正在进行中?等。

这些只是关于技术如何相互协作的一般问题。提前致谢!


答案 1

谁首先收到 HTTP 请求?

Apache,几乎可以肯定。不过,可能会有直接与Tomcat对话的管理流程。

httpd如何知道何时将JSP请求转发到Tomcat,或者只是响应请求本身?

从其配置。具体细节会有所不同。例如,它可能正在使用 或 ,在这种情况下,您将在配置文件中找到指令,例如:mod_jkmod_jk2JkMount

JkMount /*.jsp ajp13_worker

...它告诉它在站点的根目录下传递与文件中定义的 匹配的文件的请求。*.jspajp13_workerworkers.properties

或者它可以在简单的HTTP反向代理安排中设置。或者别的什么。

httpd 如何将请求“传递”到 Tomcat,以及如何“接收”来自 Tomcat 的响应?

这取决于配置;它可以是HTTP,也可以是AJP,或者它可能使用其他模块。

它是否只是“复制粘贴”对Tomcat正在侦听的端口的请求/响应?

差不多吧。:-)请参阅上面的反向代理链接。

是否有某种操作系统级别的进程间通信正在进行中?

是的。AFAIK,它都是基于套接字的(而不是共享内存的东西),这意味着(除其他外)Tomcat和Apache不需要在同一台机器上运行。


答案 2

推荐