2012-03-20 110 views
13

我正在繼承一個涉及Java Web應用程序的項目,該應用程序的後端由Apache httpd/Tomcat組合支持。 Web服務器用於提供JS,靜態內容並執行通用負載均衡,Tomcat通過單個WAR文件提供JSP。Apache httpd和Tomcat如何協同工作?

我會接受訪問代碼庫今天晚些時候或明天,但想嘗試做一些研究的時間提前。

我的問題可以概括爲:怎麼辦這兩一起工作?

  • 誰第一次收到HTTP請求?
  • httpd是如何知道何時將JSP請求轉發給Tomcat的,還是隻響應請求本身?
  • httpd如何將請求「傳遞」給Tomcat並「接收」來自Tomcat的響應?它只是將請求/響應「複製粘貼」到Tomcat正在監聽的端口?是否有某種OS級進程間通信正在進行?等等

這些只是關於這些技術如何相互協作的一般問題。提前致謝!

+0

我已經在下面發佈了一些答案,但是我不會花太多時間在特定情況下進行細化,直到您看到您實際看到的內容。可能最好的辦法是閱讀反向代理的一般原理等(答案中的鏈接)。 – 2012-03-20 18:07:51

回答

18

誰第一個接收HTTP請求?

Apache的,幾乎可以肯定。雖然可能有直接與Tomcat交談的管理進程。

httpd如何知道何時將JSP請求轉發到Tomcat,或只是對請求本身做出響應?

從其配置。具體情況會有所不同。它可能,例如,是使用mod_jkmod_jk2,在這種情況下,你會在配置文件中找到JkMount指令,如:

JkMount /*.jsp ajp13_worker 

...它告訴它的請求傳遞在的根用於匹配*.jspajp13_worker的文件的站點,該文件在workers.properties文件中定義。

或者它可以在一個簡單的HTTP reverse-proxy安排設置。或者是其他東西。

httpd如何將請求「傳遞」給Tomcat並「接收」響應?

這取決於配置;它可能是HTTP,它可能是AJP,或者它可能正在使用一些其他模塊。

它只是將請求/響應「複製粘貼」到Tomcat正在監聽的端口上?

的排序。 :-)請參閱上面的反向代理鏈接。

是否有某種操作系統級的進程間通信正在進行?

是的。 AFAIK,它基於套接字(而不是共享內存),這意味着(除其他外)Tomcat和Apache不需要在同一臺機器上運行。

+0

讓我們假設一個動態內容的HTTP請求觸及Apache。 Apache產生一個新線程,線程將它傳遞給Tomcat,然後殺死該線程(或將其返回給池)。一旦收到HTTP請求,Tomcat會產生一個新的線程來處理請求。然後,響應從Tomcat流到Apache,到客戶端。真的嗎? – 2013-04-21 23:55:41