我正在继承一个涉及 Java 网络应用程序的项目,该应用程序的后端由 Apache httpd/Tomcat 组合提供支持。 Web 服务器用于返回 JS、静态内容并执行一般负载平衡,而 Tomcat 通过单个 WAR 文件返回 JSP。
我将在今天晚些时候或明天获得对代码库的访问权限,但我想尝试提前做一些研究。
我的问题可以概括为:这两者如何协同工作?
- 谁最先收到 HTTP 请求?
- httpd 如何知道何时将 JSP 请求转发到 Tomcat,或仅自己响应请求?
- httpd 如何将请求“传递”给 Tomcat,并“接收”来自 Tomcat 的响应?它只是将请求/响应“复制粘贴”到 Tomcat 正在监听的端口吗?是否正在进行某种操作系统级别的进程间通信?等
这些只是关于技术如何相互协作的一般性问题。提前致谢!
最佳答案
Who first receives HTTP requests?
Apache,几乎可以肯定。不过,可能存在直接与 Tomcat 对话的管理进程。
How does httpd know when to forward JSP requests on to Tomcat, or to just respond to a request itself?
从它的配置。具体情况会有所不同。例如,它可能正在使用 mod_jk
或 mod_jk2
,在这种情况下,您会在配置文件中找到 JkMount
指令,例如:
JkMount /*.jsp ajp13_worker
...它告诉它在站点的根目录将请求传递给 *.jsp
匹配的文件到 ajp13_worker
,它在 中定义>workers.properties
文件。
或者可以在简单的 HTTP 中设置 reverse-proxy安排。或者别的东西。
How does httpd "pass" the request to, and "receive" the response from, Tomcat?
这取决于配置;可能是 HTTP,也可能是 AJP ,或者它可能正在使用一些其他模块。
Does it just "copy-n-paste" the request/response to a port Tomcat is listening on?
有点。 :-) 请参阅上面的反向代理链接。
Is there some sort of OS-level interprocess communication going on?
是的。据我所知,它都是基于套接字的(而不是共享内存的东西),这意味着(除其他外)Tomcat 和 Apache 不需要在同一台机器上运行。
关于java - Apache httpd 和 Tomcat 如何协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9792300/