Apache HTTP Server與Tomcat整合學習記錄

Apache HTTP Server與Tomcat整合

個人環境:Windows10,JDK8,Tomcat8.5,Apache2.4,JK模組1.2.4

前言

​ 其實網上有很多教程,但問題是得每次找個正確率很高的卻很難。所以在此做個簡單的記錄,方便快速查找。

注意:

  • 關於JDK環境配置在此不多贅述。

  • Tomcat9版本配置中將AJP的配置注釋了,所以很多人整合不合適

  • 下面會用到cmd命令窗口,一定要以管理員身份打開,否則許可權不夠。

開始整合

一、下載安裝Apache HTTP Server

第一步:下載解壓縮

下載地址://www.apachehaus.com/cgi-bin/download.plx

第二步:配置文件

打開conf文件夾,修改其中「httpd.conf」文件配置;更改為自己的文件安放路徑

第三步:安裝

用管理員身份打開cmd,進入文件bin目錄所在位置,並輸入以下命令

# 服務名可以自定義,這裡我的是Apache24
httpd -k install -n "Apache24"
# 卸載
httpd -k uninstall -n "Apache24"

同時可以打開同級目錄下的ApacheMonitor程式

第四步:啟動

# 啟動 Apache 服務
httpd.exe -k start -n "Apache24"
# 重啟 Apache 服務
httpd.exe -k restart -n "Apache24"
# 停止 Apache 服務
httpd.exe -k stop -n "Apache24"

並查看是否啟動成功,如果可以成功訪問localhost:80或者ApacheMonitor程式中按鈕亮起說明安裝啟動成功

二、下載安裝Tomcat

在此也不做多餘贅述,只需去官網下載解壓即可

第一步:下載解壓縮

下載地址://tomcat.apache.org/download-80.cgi

第二步:進入bin目錄,雙擊startup.bat即可

注意:個人是未修改原始文件配置資訊,所以不是從原始文件開始更改的,可能問題在自己的配置上。

三、整合-下載JK模組

第一步:下載解壓縮

下載地址://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

注意:根據自己的需求版本匹配進行下載,個人這裡是下載的1.2.40版本

第二步:複製mod_jk.so

解壓縮後,找到mod_jk.so文件,然後將文件複製到Apache下的modules文件夾下

第三步:新建「mod_jk.conf」文件

步驟圖

在Apache下的conf文件夾下新建

輸入以下文件內容

#載入mod_jk Module     
LoadModule jk_module modules/mod_jk.so         
#指定 workers.properties文件路徑     
JkWorkersFile conf/workers.properties       
#指定那些請求交給tomcat處理,"controller"為在workers.propertise里指定的負載分配控制器      
JkMount /*.do controller
JkMount /*WEB-INF controller
JkMount /*j_spring_security_check controller
JkMount /*.action controller
JkMount /servlet/* controller
JkMount /*.jsp controller
JkMount /*.do controller
JkMount /*.action controller
JkMount /* controller

第四步:修改httpd.conf文件

去Apache下,找到該配置文件,在文件末尾添加一段程式碼,引入mod_jk.conf配置文件

Include conf/mod_jk.conf

第五步:新建「workers.properties」

worker.list =controller,tomcat1,tomcat2   #server 列表
#========tomcat1========    
worker.tomcat1.port=8009       #ajp13 埠號,在tomcat下server.xml配置,默認8009
worker.tomcat1.host=localhost  #tomcat的主機地址,如不為本機,請填寫ip地址 
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1    #server的加權比重,值越高,分得的請求越多 
#========tomcat2========  
#worker.tomcat2.port=8019
#worker.tomcat2.host=localhost
#worker.tomcat2.type=ajp13
#worker.tomcat2.lbfactor = 1
#========controller,負載均衡控制器========   
worker.controller.type=lb
#指定分擔請求的tomcat 
worker.controller.balanced_workers=tomcat1,tomcat2      
#回話是否有粘性,false表示無粘性,同一個回話的請求會到不同的tomcat中處理
worker.controller.sticky_session=false               
#當一個節點蹦了,如果設值為true,那麼伺服器返回500錯誤給客戶端,如果設值為false,則轉發給其他的tomcat,但是會丟失回話資訊
worker.controller.sticky_session_force=false        

建議

看網上有人說先啟動Apache再去啟動Tomcat這樣不會出問題,這個點可以注意一下,雖然我個人沒遇到。

如果其中會碰到問題,可以參考該博文//blog.csdn.net/dongdong9223/article/details/64921439

關於Tomcat中AJP的配置

<!-- Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

第一個連接器監聽8080埠,負責建立HTTP連接。在通過瀏覽器訪問Tomcat伺服器的Web應用時,使用的就是這個連接器。

第二個連接器監聽8009埠,負責和其他的HTTP伺服器建立連接。在把Tomcat與其他HTTP伺服器集成時,就需要用到這個連接器。AJP連接器可以通過AJP協議和一個web容器進行交互。

關於proxy、proxy_blancer和mod_jk的比較

  1. proxy的缺點是,當其中一台tomcat停止運行的時候,apache仍然會轉發請求過去,導致502網關錯誤。但是只要伺服器再啟動就不存在這個問題。
  2. mod_jk方式的優點是,Apache 會自動檢測到停止掉的tomcat,然後不再發請求過去。
    缺點就是,當停止掉的tomcat伺服器再次啟動的時候,Apache檢測不到,仍然不會轉發請求過去。
  3. proxy和mod_jk的共同優點是.可以只將Apache置於公網,節省公網IP地址資源。
    可以通過設置來實現Apache專門負責處理靜態網頁,讓Tomcat專門負責處理jsp和servlet等動態請求。
    共同缺點是:如果前置Apache代理伺服器停止運行,所有集群服務將無法對外提供。
  4. proxy和mod_jk對靜態頁面請求的處理,都可以通設置來選取一個儘可能優化的效果。
    mod_proxy_balancer和mod_jk都需要修改tomcat的配置文件配合
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  5. 這三種Tomcat集群方式對實現最佳負載均衡都有一定不足,mod_proxy_balancer和mod_jk相對好些,mod_jk的設置能力更強些。lbfactor參數來分配請求任務。
  6. apache自帶mod_proxy功能模組中目前只可以實現兩種不同的負載均衡集群實現方式,第一種是分工合作的的形式,通過各台主機負責不同的任務而實現任務分工。第二種是不同的機器在擔任同樣的任務,某台機器出現故障主機可以自動檢測到將不會影響到客戶端,而第一種卻不能實現但第一種實現方式的優點在於他是主伺服器負擔相應沒第二種大因為台只是提供跳轉指路功能,形象的說他不給你帶路只是告訴你有條路可以到,但到了那是否可以看到你見的人他已經不會去管你了。相比之下第二種性能要比第一種會好很多;但他們都有個共同點都是一托N形式來完成任務的所以你的主機性能一定要好。

關於apache整合tomcat部署集群

可參考該博文:apache整合tomcat部署集群

Tomcat優化(未親測)
在service.xml文件里加入

maxThreads="800" minSpareThreads="25" maxSpareThreads="700" enableLookups="false" acceptCount="1200"

maxThreads=」150」 表示最多同時處理150個連接
minSpareThreads=」25」 表示即使沒有人使用也開這麼多空執行緒等待
maxSpareThreads=」75」 表示如果最多可以空75個執行緒,例如某時刻有80人訪問,之後沒有人訪問了,則tomcat不會保留80個空執行緒,而是關閉5個空的。
acceptCount=」100」 當同時連接的人數達到maxThreads時,還可以接收排隊的連接,超過這個連接的則直接返回拒絕連接

Apache+Tomcat配置測試
測試Tomcat
首先空項目跑一下,看tomcat能否正常啟動
然後加項目跑一下,看tomcat能否正常啟動

測試Apache
Tomcat啟動後重啟一下Apache服務,看能否啟動
注意:Apache有可能啟動不起來,那麼解決方式是查看Apache安裝目錄下的logs目錄下的error.log文件,
根據log文件解決可能存在的問題。直到Apache可以正常啟動,至此Apache就可以正常啟動了。

測試負載均衡
寫一個測試jsp放置於項目中,運行一下,看控制台輸出

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>

Insert title here <% System.out.println("==========================="); %> 經測試 1. workers.properties配置為worker.controller.sticky_session=1,且tomcat的server中Cluster未打開時,同一瀏覽器多次訪問均進同一tomcat,換瀏覽器後會進另一個tomcat。 2. workers.properties配置為另一種方式時為負載均衡,請求均勻分布在兩個tomcat。

最後

雖然技術在不斷的更替,但是有時間的話可以多了解一點是一點。
傲不可長,欲不可縱,樂不可極,志不可滿

Tags: