java - Apache httpd 和 Tomcat 如何协同工作?

标签 java apache tomcat web-applications war

我正在继承一个涉及 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_jkmod_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/

相关文章:

java - 如何强制 CLOSE_WAIT 停止

java - Tomcat 已启动但未创建数据库表且本地主机为 :8080 shows "HTTP Status 404"

java - 使用 jackson-dataformat-csv 从 csv 解析双引号

java - 每个窗口只打开一次

apache - 我的网站在谷歌搜索中显示了错误的网址

java - 调试 AngularJS + Spring MVC + Tomcat Web 应用程序

Java 数组列表在迭代 JSON 对象中的键时仅添加 1 个项目(最后一个键)

java - 如何对 Spring MVC 注释 Controller 进行单元测试?

php - Docker 容器中的 Apache、PHP、WordPress 缓存问题

apache - chrome 不信任 https 并显示 ERR_SSL_SERVER_CERT_BAD_FORMAT