Apache httpd和Tomcat如何协同工作?

15

我要接手一个Java web应用的项目,其后端由Apache httpd/Tomcat组合驱动。Web服务器用于服务静态内容、JS以及负载均衡,并通过单个WAR文件返回JSP到Tomcat。

我将在今天或明天后收到代码库的访问权限,但想提前进行一些研究。

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

  • 谁先接收HTTP请求?
  • httpd如何知道何时将JSP请求转发到Tomcat,或者仅响应请求本身?
  • httpd如何“传递”请求并从Tomcat“接收”响应?它只是将请求/响应“复制粘贴”到Tomcat正在监听的端口上吗?是否存在某种操作系统级别的进程间通信等?

这些只是关于这些技术如何协同工作的一般性问题。提前感谢您的回答!


我在下面发布了一些答案,但在看到实际情况之前,我不会花太多时间来研究具体细节。最好的方法可能是阅读反向代理等一般原则的相关内容(链接在答案中)。 - T.J. Crowder
1个回答

19

谁首先接收HTTP请求?

几乎肯定是Apache。但也可能存在直接与Tomcat通信的管理进程。

httpd如何知道何时将JSP请求转发到Tomcat,或者仅对请求进行响应?

根据其配置。具体情况会有所不同。例如,它可能正在使用mod_jkmod_jk2,在配置文件中可以找到JkMount指令,例如:

JkMount /*.jsp ajp13_worker

这段代码告诉httpd服务器在站点根目录下遇到匹配*.jsp的文件请求时,将其传递给在workers.properties文件中定义的ajp13_worker

或者它可以设置为一个简单的HTTP反向代理。或者其他方式。

 

httpd如何将请求“传递”到Tomcat并从Tomcat“接收”响应?

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

 

它只是将请求/响应“复制粘贴”到Tomcat正在侦听的端口上吗?

有点像。 :-)请参阅上面的反向代理链接。

 

是否存在某种OS级别的进程间通信?

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


假设一个请求动态内容的HTTP请求到达Apache。Apache生成一个新线程,该线程将其传递给Tomcat,然后杀死该线程(或将其返回到池中)。收到HTTP请求后,Tomcat生成一个新线程来处理请求。然后,响应从Tomcat流向Apache,再到客户端。这是真的吗? - Kevin Meredith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接