Apache HTTP Server與Tomcat整合
個人環境:Windows10,JDK8,Tomcat8.5,Apache2.4,JK模塊1.2.4
前言
? 其實網上有很多教程,但問題是得每次找個正確率很高的卻很難,所以在此做個簡單的記錄,方便快速查找,
注意:
-
關于JDK環境配置在此不多贅述,
-
Tomcat9版本配置中將AJP的配置注釋了,所以很多人整合不合適
-
下面會用到cmd命令視窗,一定要以管理員身份打開,否則權限不夠,
開始整合
一、下載安裝Apache HTTP Server
第一步:下載解壓縮
下載地址:https://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
在此也不做多余贅述,只需去官網下載解壓即可
第一步:下載解壓縮
下載地址:https://tomcat.apache.org/download-80.cgi
第二步:進入bin目錄,雙擊startup.bat即可
注意:個人是未修改原始檔案配置資訊,所以不是從原始檔案開始更改的,可能問題在自己的配置上,
三、整合-下載JK模塊
第一步:下載解壓縮
下載地址:http://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這樣不會出問題,這個點可以注意一下,雖然我個人沒遇到,
如果其中會碰到問題,可以參考該博文https://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的比較
- proxy的缺點是,當其中一臺tomcat停止運行的時候,apache仍然會轉發請求過去,導致502網關錯誤,但是只要服務器再啟動就不存在這個問題,
- mod_jk方式的優點是,Apache 會自動檢測到停止掉的tomcat,然后不再發請求過去,
缺點就是,當停止掉的tomcat服務器再次啟動的時候,Apache檢測不到,仍然不會轉發請求過去,- proxy和mod_jk的共同優點是.可以只將Apache置于公網,節省公網IP地址資源,
可以通過設定來實作Apache專門負責處理靜態網頁,讓Tomcat專門負責處理jsp和servlet等動態請求,
共同缺點是:如果前置Apache代理服務器停止運行,所有集群服務將無法對外提供,- proxy和mod_jk對靜態頁面請求的處理,都可以通設定來選取一個盡可能優化的效果,
mod_proxy_balancer和mod_jk都需要修改tomcat的組態檔配合
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">- 這三種Tomcat集群方式對實作最佳負載均衡都有一定不足,mod_proxy_balancer和mod_jk相對好些,mod_jk的設定能力更強些,lbfactor引數來分配請求任務,
- 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,
最后
雖然技術在不斷的更替,但是有時間的話可以多了解一點是一點,
傲不可長,欲不可縱,樂不可極,志不可滿
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280882.html
標籤:其他
上一篇:Java 常用類總結(SE基礎)
