1. 程式人生 > >Apache和Tomcat整合(一個Apache 不同域名處理多個不同業務)

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.

相關推薦

ApacheTomcat整合一個Apache 不同域名處理不同業務

一、簡介在專案中,幾乎任何一個專案都包括靜態資源和動態請求兩大部分。特別對於入口網站這樣的專案,靜態內容資源會更多,我們使用一般的 Tomcat 部署時,Tomcat 對靜態資源的處理能力比較慢,至少比 Apache 要慢很多。為了提高專案的訪問速度,降低伺服器負載提高效能,

配置了APACHETOMCAT整合後,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

apachetomcat有什麼不同,為什麼要整合apache tomcat

轉自:[url]http://zhidao.baidu.com/question/94817329.html[/url]1. Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。2. Apache和Tomc

Linux下Apache Httpdtomcat整合

最近學習apache+tomcat將網路上、書上和API上看到進行了一下整理,做了個小測試,算做入門學習總結吧,具體內容如下: 1、準備 下載需要的檔案。這裡假定你已經正確安裝配置好了JDK。 例如:chmod 777 jdk-6u37-linux-i586.bin ./j

Ubuntu整合ApacheTomcat

前兩篇已經寫了Apache和Tomcat的安裝,本文主要探討Apache和Tomcat的整合。 〇、為什麼要整合 Tomcat也有webserver的功能,但一般只用作除錯,其強項還是在於處理動態網頁,靜態網頁不如Apache這種專業的webserver。 一、整合是什

用jk整合Apachetomcat實現負載均衡

最近剛看完一些關於如何用jk整合Apache和tomcat的資料,為了防止自己忘記,把它們在這裡都寫下來。部分內容摘抄於網路。 首先下載tomcat, apache和jk。 1. 下載, 安裝於“C:/Program Files/Apache Software Foundat

整合整合ApacheTomcat

Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。 Apache和Tomcat都可以做為獨立的web伺服器來執行,但是Apache不能解釋java程式(jsp,serverlet)。 Apache和T

ApacheTomcat整合的配置

str windows nec x86 logs info ogr 級別 oca 下載jk連接器地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 把jk連接器即“m

apachephp結合配置httpd支持php

Apache php httpd apache和php結合 配置httpd支持php 修改配置文檔 vim /usr/local/apache2.4/conf/httpd.conf 第一步: 取消註釋 ServerName www.example.com:80 第二步: 將Require all

ApacheTomcat的區別

作為一個Java開發,Tomcat在工作中是避免不了要使用的,而使用Tomcat的時候總會出現Apache,到底Apache和Tomcat是什麼關係? 1.明確兩個概念 Apache是Web伺服器,和它類似的還有常說的Nginx,而Tomcat是應用伺服器,更明確地說To

簡化軟體整合一個Apache Camel教程

本文來自於阮一峰,文章主要講解了構建的流程,每個步驟介紹的較為詳細,希望對大家有幫助。 軟體很少(如果有的話)存在於資訊真空中。至少,這是我們軟體工

ApacheTomcat 配置負載均衡(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伺服器。此處整

結合apachetomcat實現域名埠繫結

1、本機測試的話,要先配置主機頭系統:windowsxp     C:\WINDOWS\system32\drivers\etc\hosts檔案 新增     127.0.0.1       www.abc.com     127.0.0.1       www.efg.c