TOMCAT8009端口與AJP到底是什么?TOMCAT8009端口與AJP13協議


最近關於Tomcat AJP協議漏洞的問題比較火爆,相信好多人都不太了解AJP是怎么一回事,在這里我也是在網上搜集了一些資料,在這里匯總一下

Tomcat最主要的功能是提供Servlet/JSP容器,盡管它也可以作為獨立的Java Web服務器,它在對靜態資源(如HTML文件或圖像文件)的處理速度,以及提供的Web服務器管理功能方面都不如其他專業的HTTP服務器,如IIS和Apache服務器。
  
  因此在實際應用中,常常把Tomcat與其他HTTP服務器集成。對於不支持Servlet/JSP的HTTP服務器,可以通過Tomcat服務器來運行Servlet/JSP組件。
  
  當Tomcat與其他HTTP服務器集成時,Tomcat服務器的工作模式通常為進程外的Servlet容器,Tomcat服務器與其他HTTP服務器之間通過專門的插件來通信。關於Tomcat服務器的工作模式的概念可以參考本書1.4節。
  
  本章首先討論Tomcat與HTTP服務器集成的一般原理,然后介紹Tomcat與Apache以及IIS集成的詳細步驟。
  

一、 Tomcat與HTTP服務器集成的原理

  Tomcat服務器通過Connector連接器組件與客戶程序建立連接,Connector組件負責接收客戶的請求,以及把Tomcat服務器的響應結果發送給客戶。默認情況下,Tomcat在server.xml中配置了兩種連接器:
 

<!-- Define a non-SSL Coyote HTTP/1.1
  Connector on port 8080 -->
  <Connector port="8080"
  maxThreads="150"
  minSpareThreads="25"
  maxSpareThreads="75"
  enableLookups="false"
  redirectPort="8443"
  acceptCount="100"
  debug="0"
  connectionTimeout="20000"
  disableUploadTimeout="true" />
  
  <!-- Define a Coyote/JK2 AJP 1.3
  Connector on port 8009 -->
  <Connector port="8009"
  enableLookups="false"
  redirectPort="8443" debug="0"
  protocol="AJP/1.3" />

  第一個連接器監聽8080端口,負責建立HTTP連接。在通過瀏覽器訪問Tomcat服務器的Web應用時,使用的就是這個連接器。
  
  第二個連接器監聽8009端口,負責和其他的HTTP服務器建立連接。在把Tomcat與其他HTTP服務器集成時,就需要用到這個連接器。
  
  Web客戶訪問Tomcat服務器上JSP組件的兩種方式如圖所示。

圖22-1 Web客戶訪問Tomcat服務器上的JSP組件的兩種方式
  
  在圖22-1中,Web客戶1直接訪問Tomcat服務器上的JSP組件,他訪問的URL為http://localhost:8080/index.jsp。Web客戶2通過HTTP服務器訪問Tomcat服務器上的JSP組件。假定HTTP服務器使用的HTTP端口為默認的80端口,那么Web客戶2訪問的URL為http://localhost:80/index.jsp 或者 http://localhost/index.jsp。
  
  下面,介紹Tomcat與HTTP服務器之間是如何通信的。
  

二、JK插件

  Tomcat提供了專門的JK插件來負責Tomcat和HTTP服務器的通信。應該把JK插件安置在對方的HTTP服務器上。當HTTP服務器接收到客戶請求時,它會通過JK插件來過濾URL,JK插件根據預先配置好的URL映射信息,決定是否要把客戶請求轉發給Tomcat服務器處理。
  
  假定在預先配置好的URL映射信息中,所有"/*.jsp"形式的URL都由Tomcat服務器來處理,那么在圖22-1的例子中,JK插件將把客戶請求轉發給Tomcat服務器,Tomcat服務器於是運行index.jsp,然后把響應結果傳給HTTP服務器,HTTP服務器再把響應結果傳給Web客戶2。
  
  對於不同的HTTP服務器,Tomcat提供了不同的JK插件的實現模塊。本章將用到以下JK插件:
  
  與Windows下的Apache HTTP服務器集成:mod_jk_2.0.46.dll
  
  與Linux(RedHet)下的Apache HTTP服務器集成:mod_jk.so-ap2.0.46-rh72..46-rh72
  
  與IIS服務器集成:isapi_redirect.dll

總結理解(重要)

​ 關於這個協議,一直不太明白,網上的博客講的也都是千篇一律。 都說ajp協議是tomcat為了動靜資源處理分離時,通過該協議可以將css、js等靜態資源請求轉發到Apache的http服務器處理,提高並發量。但是在優化tomcat時,沒有用到Apache服務器,則需要將其禁用。 那么問題來了,如果前端用的是Nginx(配置的端口是80)直接轉發到tomcat8080端口,並沒有通過ajp協議的8009端口吧,那么禁用掉這個配置為何能提高tomcat性能呢?


​ ajp13是一個二進制的TCP傳輸協議相比HTTP這種純文本的協議來說,效率和性能更高,也做了很多優化。顯然,瀏覽器並不能直接支持AJP13協議,只支持HTTP協議。所以實際情況是,通過Apache的proxy_ajp模塊進行反向代理,暴露成http協議給客戶端訪問。所以這么來看實際跟動靜分離沒一毛錢關系,你如果沒做動靜分離的設置,那么單純反向代理AJP13協議也沒太大的意義。

其他支持AJP協議的代理服務器當然也可以用這種做法。但是實際情況是,支持AJP代理的服務器非常少,比如目前很火爆的Nginx就沒這個模塊。因此tomcat的配置大部分都是關閉AJP協議端口的,因為除了Apache之外別的http server幾乎都不能反代AJP13協議,自然就沒太大用處了。

原文參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM