Apache httpd和Tomcat如何协同工作?

时间:2012-03-20 17:53:48

标签: java apache tomcat web-applications war

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

我将在今天或明天稍后访问代码库,但希望提前尝试进行一些研究。

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

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

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

1 个答案:

答案 0 :(得分:19)

  

谁首先收到HTTP请求?

几乎可以肯定的是,Apache。但是,可能存在直接与Tomcat对话的管理进程。

  

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

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

JkMount /*.jsp ajp13_worker

...告诉它将网站根目录中的*.jsp文件传递给ajp13_workerworkers.properties文件中定义了这些文件。

或者可以通过简单的HTTP reverse-proxy安排进行设置。或者别的什么。

  

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

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

  

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

排序。 :-)请参阅上面的反向代理链接。

  

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

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