Apache和Tomcat整合(一個Apache 不同域名處理多個不同業務)
一、簡介
在專案中,幾乎任何一個專案都包括靜態資源和動態請求兩大部分。特別對於入口網站這樣的專案,靜態內容資源會更多,我們使用一般的 Tomcat 部署時,Tomcat 對靜態資源的處理能力比較慢,至少比 Apache 要慢很多。
為了提高專案的訪問速度,降低伺服器負載提高效能,我們使用Apache來處理靜態資源,把動態資源和請求交給 Tomcat 處理。
當然,在單純處理併發和靜態資源指標方面,Nginx要比Apache好,至於Nginx和Apache的具體區別,以及什麼專案使用Nginx、什麼專案適合用Apache,異或是使用Nginx加Apache一起使用…… 這個不是本文要探討的範圍,這兩個開源專案各有優缺點,大家可以針對自己專案選擇合適的方案。
本文就簡單的對Apache和Tomcat如何整合,進行實際配置進行說明:
apache與tomcat負載叢集整合方法有3種jk、jk_proxy、http_proxy
二、mod_proxy 和 mod_jk 的比較
那麼什麼時候使用哪一個呢?這依賴於你的架構。如果你已經有了或者需要apache 2.2的功能,那麼你可以再mod_proxy和mod_jk直接選擇。mod_jk在apache2.2上允許得很好。關鍵看你需要什麼樣的功能:mod_proxy
--------------
優勢:
不需要編譯和維護一個對立的模組。mod_proxy,mod_proxy_http,mod_proxy_ajp,mod_proxy_balancer已經是apache 2.2+的標準整合部分;
可以使用http、https和AJP協議,即便是在同一個balancer中。
劣勢:
mod_proxy_ajp不支援大於8k的資料包;
只有最基本的負載均衡器;
不支援域模型叢集(domain model clustering)
mod_jk
--------------
優勢:
先進的負載均衡器;
先進的節點失敗偵察功能;
支援大型AJP 資料包
劣勢:
需要單獨維護一個獨立的模組;
我個人建議是如果有能力維護mod_jk模組的二進位制版本,儘量使用mod_jk。mod_proxy一直在更新但還缺少一些mod_jk的功能。但是,如果你需要https和一個簡單的負載均衡就是用mod_proxy.
三、實踐
以 mod_jk 為例,使用1個apache 同時支援2個tomcat 不同業務的處理(web和wap)。1、下載安裝 Apache (本文忽略)
2、下載安裝 Tomcat (本文忽略)
3、下載 mod_jk 安裝包
下載連線Apache和Tomcat(mod_jk) 的包 tomcat-connectors-1.2.41-src.tar.gz
4、安裝 mod_jk
# cd tomcat-connectors-1.2.41-src/native/
# ./configure --with-apxs=/usr/local/apache2/bin/apxs
# make
# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/ #拷貝至Apache指定模組目錄
5、配置Apache相關引數檔案
1) 配置 mod_jk 模組
剛剛安裝了mod_jk 模組,也已經拷貝到Apache的模組目錄中,下面就是讓Apache來支援它。
需要在Apache的conf目錄下新建配置檔案:
workers.properties#定義Tomcat工作的的配置檔案
mod_jk.conf#定義mod_jk 的配置檔案
# cd /usr/local/apache2/conf/
# vi mod_jk.conf
#指定workers.properties的位置
JkWorkersFile conf/workers.properties
#指定jk的日誌輸出檔案
JkLogFile logs/mod_jk.log
#JkShmFile配置
JkShmFile logs/jk-runtime-status
#指定日誌級別
JkLogLevel info
#指定日誌輸出的時間戳格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
#JkOptions指示傳送給SSL金鑰大小
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
#指定日誌中時間戳後面的內容:%w:工作的tomcat例項 %V:目標ip %T:耗時
JkRequestLogFormat "%w %V %T"
# vi workers.properties
#指定需要工作的tomcat節點,如多個用“,”分割
worker.list=worker_web,worker_wap
####################################################################
worker.worker_web.type=ajp13 #指定worker_web使用ajp13協議與Tomcat程序通訊
worker.worker_web.host=localhost #指定worker_web的位置,如果不是本機,就配置IP地址
worker.worker_web.port=8009 #指定worker_web的工作埠
worker.worker_web.socket_keepalive=1 #此配置項為當Apache和Tomcat之間有防火牆時,讓os每隔多久想未啟用的連線傳送KEEP_ALIVE資訊,防止防火牆切斷未啟用的網路連線
worker.worker_web.socket_timeout=300 #指定worker_web上的連線在未啟用的狀況下持續多久,Apache將主動切斷
####################################################################
worker.worker_wap.type=ajp13
worker.worker_wap.host=localhost
worker.worker_wap.port=8109
worker.worker_wap.socket_keepalive=1
worker.worker_wap.socket_timeout=300
2) 修改 Apache 的主配置檔案 httpd.conf 配置多個虛擬主機
a) 找到 Include conf/extra/httpd-vhosts.conf 去掉前面的 “#”
b) vi conf/extra/httpd-vhosts.conf
########################################################
LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf
########################################################
<VirtualHost *:80>
#ServerAdmin [email protected]
DocumentRoot "/svcroot/runtime/webstatic/shanhyweb"
ServerName shanhyweb.example.com
#ServerAlias www.shanhyweb.example.com
ErrorLog "logs/shanhyweb-error_log"
CustomLog "logs/shanhyweb-access_log" common
<IfModule mod_jk.c>
#日誌輸出檔案(其他配置也可以重寫mod_jk.conf裡面的配置)
JkLogFile logs/mod_jk_shanhyweb.log
#指URL指向如果有servlet,則讓worker_web去處理
JkMount /servlet/* worker_web
#指URL為/*.jsp的頁面,讓worker_web去處理
JkMount /*.jsp worker_web
#指URL為/*.do的頁面,讓worker_web去處理
JkMount /*.do worker_web
#指URL為/*.json的頁面,讓worker_web去處理
JkMount /*.json worker_web
</IfModule>
<Directory "/svcroot/runtime/webstatic/shanhyweb">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
#ServerAdmin [email protected]
DocumentRoot "/svcroot/runtime/webstatic/shanhywap"
ServerName shanhywap.example.com
#ServerAlias www.shanhywap.example.com
ErrorLog "logs/shanhywap-error_log"
CustomLog "logs/shanhywap-access_log" common
<IfModule mod_jk.c>
#日誌輸出檔案(其他配置也可以重寫mod_jk.conf裡面的配置)
JkLogFile logs/mod_jk_shanhywap.log
#指URL指向如果有servlet,則讓worker_wap去處理
JkMount /servlet/* worker_wap
#指URL為/*.jsp的頁面,讓worker_wap去處理
JkMount /*.jsp worker_wap
#指URL為/*.do的頁面,讓worker_wap去處理
JkMount /*.do worker_wap
#指URL為/*.json的頁面,讓worker_wap去處理
JkMount /*.json worker_wap
</IfModule>
<Directory "/svcroot/runtime/webstatic/shanhywap">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
配置檔案中 /svcroot/runtime/webstatic/shanhyweb 和 /svcroot/runtime/webstatic/shanhywap 分別為web和wap的靜態資源目錄
配置檔案中 worker_web 和 worker_wap 為我們2個處理不同業務的 Tomcat
6、 配置web的Tomcat 和wap 的Tomcat
我在/app/webserver 目錄下放了2個tomcat,分別是 apache-tomcat-7.0.63-wap 和 apache-tomcat-7.0.63-web
修改 apache-tomcat-7.0.63-wap/conf/server.xml 中的ajp 埠為8109,http埠為 8180,server 埠為8105
在 apache-tomcat-7.0.63-wap/conf/server.xml 的最下面的 </Host> 上面一行新增:
<Context path="" docBase="/svcroot/runtime/webinterface/shanhywap" reloadable="true" distributable="true"/>
在 apache-tomcat-7.0.63-web/conf/server.xml 的最下面的 </Host> 上面一行新增:
<Context path="" docBase="/svcroot/runtime/webinterface/shanhyweb" reloadable="true" distributable="true"/>
7、重啟相關服務
重啟Apache 服務,並啟動web和wap的tomcat 服務。
8、測試
修改本機 C:\Windows\System32\drivers\etc 目錄下的 hosts 檔案,在最後新增:
192.168.19.130shanhyweb.example.com
192.168.19.130shanhywap.example.com
其中 192.168.19.130 為我們上面配置的Linux 服務的IP地址。
伺服器上靜態資原始檔:
/svcroot/runtime/webstatic/shanhywap/index.html 內容為 This is my page. ShanhyWap-Static.
/svcroot/runtime/webstatic/shanhyweb/index.html 內容為 This is my page. ShanhyWeb-Static.
伺服器上2個Tomcat 配置的專案中的 jsp 測試檔案:
/svcroot/runtime/webinterface/shanhywap/test.jsp 內容為 ShanhyWap Content.
/svcroot/runtime/webinterface/shanhyweb/test.jsp 內容為 ShanhyWeb Content.
訪問地址測試:
訪問:http://shanhywap.example.com 後網頁顯示 This is my page. ShanhyWap-Static.
訪問:http://shanhyweb.example.com 後網頁顯示 This is my page. ShanhyWeb-Static.
訪問:http://shanhywap.example.com/test.jsp 後網頁顯示 ShanhyWap Content.
訪問:http://shanhywap.example.com/test.jsp 後網頁顯示 ShanhyWeb Content.
9、相關檔案
最後列出本問整合涉及到的相關檔案目錄位置:
apache 安裝目錄 /usr/local/apache2
apache 相關配置檔案:
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/mod_jk.conf
/usr/local/apache2/conf/workers.properties
/usr/local/apache2/conf/extra/httpd-vhosts.conf
webserver 的2個Tomcat 目錄:
/app/webserver/apache-tomcat-7.0.63-wap
/app/webserver/apache-tomcat-7.0.63-web
webinterface 程式目錄(2個Tomcat分別對應的專案工程) :
/svcroot/runtime/webinterface/shanhyweb
-- test.jsp
/svcroot/runtime/webinterface/shanhywap
-- test.jsp
webstatic 靜態資源目錄
/svcroot/runtime/webstatic/shanhyweb
-- index.html
/svcroot/runtime/webstatic/shanhywap
-- index.html
************************************************************************
題外話說一下我的目錄歸類,我的 /svcroot 目錄目錄結構如下:
/svcroot
-- runtime
-- standalone(存放java程式)
-- webinterface(存放Tomcat對應的專案工程)
-- webstatic(存放專案工程的靜態資源)
-- workspace
-- build(hudson custom 目錄,SVN 程式碼)
-- shanhyweb-source
-- shanhywap-source
-- shanhyAndroid-source
-- dist(build編譯後的檔案目錄,待發布)
-- logs(專案相關logs)
--------------------------
(完)
訪問:http://shanhywap.example.com 後網頁顯示 This is my page. ShanhyWap-Static.
訪問:http://shanhyweb.example.com 後網頁顯示 This is my page. ShanhyWeb-Static.
相關推薦
Apache和Tomcat整合(一個Apache 不同域名處理多個不同業務)
一、簡介在專案中,幾乎任何一個專案都包括靜態資源和動態請求兩大部分。特別對於入口網站這樣的專案,靜態內容資源會更多,我們使用一般的 Tomcat 部署時,Tomcat 對靜態資源的處理能力比較慢,至少比 Apache 要慢很多。為了提高專案的訪問速度,降低伺服器負載提高效能,
配置了APACHE和TOMCAT整合後,firefox中的window.parent.document不能用(http_proxy的埠問題)
我在linux上使用http_proxy的方式配置了apache跟tomcat的負載均衡,後來發現在firefox中window.parent.document.getElementById("menu").src="content/contentNav.jsp";沒
關於"一個作業系統下如何安裝多個不同版本的JDK?"、並實現不同版本之間的相互切換使用
本文章將教你如何在一個作業系統下安裝多個不同版本的JDK, 並且實現不同版本直接的相互切換使用。 JDK的各個版本如下: 由於以前我們總是習慣直接在Oracle官網上找到所需的版本進行直接下載JDK, 但是筆者我今天也是埋頭直接去了官網, 奈何Oracle官方已經限制了
IDEA自定義類註釋和方法註釋(自定義groovyScript方法實現多行引數註釋)
一、類註釋 1、開啟設定面板:file -> setting -> Editor -> file and code Templates 選擇其中的inclues選項卡,並選擇File header,如圖。不要選擇Files選項卡再設定Class,這樣比較麻煩,而且這樣設定以後沒新建一個類都要
MapReduce處理多個不同的出入檔案
MultipleInputs類指定不同的輸入檔案路徑以及輸入文化格式 現有兩份資料 phone 123,good number 124,common number 125,bad number user zhangsan,123 lisi,124 wangwu,125 現在
springMVC的一個controller方法怎麼處理多個請求地址
寫這篇部落格的想法是前一陣子在csdn的問答中遇到有人問這個問題(傳送門:http://ask.csdn.net/questions/382662),當時我也很懵逼,因為確實沒有具體研究過,所以趁這次機會記錄一下,如果有什麼不對滴,請大家多多斧正,始めまし
自定義HttpMessageConverter處理多個不同陣列形式的JSON資料
需求 在一個成績管理系統中,有實體類Score和實體類Student,現需要對這兩個實體類關聯的資料庫表分別進行批量插入,因而需要處理兩種不同的JSON資料(均為陣列形式),並轉換為相應的List。在兩種實體類http請求中,Student類中的成員變數與對應
Docker Compose 編排容器(單臺伺服器,安裝多個docker服務)
參考: https://blog.csdn.net/boling_cavalry/article/deta
apache和tomcat有什麼不同,為什麼要整合apache 和tomcat
轉自:[url]http://zhidao.baidu.com/question/94817329.html[/url]1. Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。2. Apache和Tomc
Linux下Apache Httpd和tomcat整合
最近學習apache+tomcat將網路上、書上和API上看到進行了一下整理,做了個小測試,算做入門學習總結吧,具體內容如下: 1、準備 下載需要的檔案。這裡假定你已經正確安裝配置好了JDK。 例如:chmod 777 jdk-6u37-linux-i586.bin ./j
Ubuntu整合Apache和Tomcat
前兩篇已經寫了Apache和Tomcat的安裝,本文主要探討Apache和Tomcat的整合。 〇、為什麼要整合 Tomcat也有webserver的功能,但一般只用作除錯,其強項還是在於處理動態網頁,靜態網頁不如Apache這種專業的webserver。 一、整合是什
用jk整合Apache和tomcat實現負載均衡
最近剛看完一些關於如何用jk整合Apache和tomcat的資料,為了防止自己忘記,把它們在這裡都寫下來。部分內容摘抄於網路。 首先下載tomcat, apache和jk。 1. 下載, 安裝於“C:/Program Files/Apache Software Foundat
整合整合Apache和Tomcat
Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。 Apache和Tomcat都可以做為獨立的web伺服器來執行,但是Apache不能解釋java程式(jsp,serverlet)。 Apache和T
Apache與Tomcat整合的配置
str windows nec x86 logs info ogr 級別 oca 下載jk連接器地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 把jk連接器即“m
apache和php結合(配置httpd支持php)
Apache php httpd apache和php結合 配置httpd支持php 修改配置文檔 vim /usr/local/apache2.4/conf/httpd.conf 第一步: 取消註釋 ServerName www.example.com:80 第二步: 將Require all
Apache和Tomcat的區別
作為一個Java開發,Tomcat在工作中是避免不了要使用的,而使用Tomcat的時候總會出現Apache,到底Apache和Tomcat是什麼關係? 1.明確兩個概念 Apache是Web伺服器,和它類似的還有常說的Nginx,而Tomcat是應用伺服器,更明確地說To
簡化軟體整合:一個Apache Camel教程
本文來自於阮一峰,文章主要講解了構建的流程,每個步驟介紹的較為詳細,希望對大家有幫助。 軟體很少(如果有的話)存在於資訊真空中。至少,這是我們軟體工
Apache和Tomcat 配置負載均衡(mod-proxy方式)-無session共享、無粘性session
轉:https://blog.csdn.net/wangjunjun2008/article/details/38268483 mod-proxy方式實現負載均衡是利用了Apache 2.x版本自帶的mod_proxy模組使用代理技術來連線Tomcat; http_proxy模式基於HTTP協議
web伺服器、Apache 和 tomcat 關係的理解
以一次JSP請求響應為例,講解伺服器,Apache、Tomcat之間的關係。 帶著這樣一個概念去看:Apache與Apache Tomcat(簡稱Tomcat)都是可以獨立執行的伺服器。你平時見到的apache-tomcat-7.0.72實際上只是Tomcat伺服器。此處整
結合apache和tomcat實現多域名、多埠繫結
1、本機測試的話,要先配置主機頭系統:windowsxp C:\WINDOWS\system32\drivers\etc\hosts檔案 新增 127.0.0.1 www.abc.com 127.0.0.1 www.efg.c