Apache http Server與Tomcat整合

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

既然 Tomcat 本身已經可以提供這樣的服務,我們為什麼還要引入 Apache 或者其他的一些專門的 HTTP 伺服器呢?原因有下面幾個:Apache的HTTPD是目前比較受歡迎的網站伺服器軟體,它不但功能強大,而且完全免費,並且支持市場上流行的各種操作系統(Windows,Linux,Mac os).同時對於Java Servlet/JSP的支持,通常也會使用同樣Apache出品的Tomcat. Tomcat除了支持Java Servlet/JSP之外,也可以當做網站伺服器使用,但是在對於靜態的html文件、圖片文件等的解析效率上不如Apache HTTPD的執行效率高.應用tomcat的伺服器如果網站的訪問量較大,系統資源佔用會明顯升高,近日筆者在項目執行過程中遇到這一問題,便也想到同時應用tomcat apache服務.Apache負責靜態資源處理,tomcat負責jsp和java servlet等動態資源的處理.

整合之後的好處是:

1. 提升對靜態文件的處理性能
2. 利用 Web 伺服器來做負載均衡以及容錯
3. 無縫的升級應用程序

原理:

tomcat 為一個servelet容器,apache為一個web server,兩者之間通信通過mod_jk的模塊(由web伺服器像apache、iis等使用)和Web Server通信,Tomcat 默認的 AJP Connector 的埠是 8009.整個過程其實就是讓apache的httpd.conf文件調用mod_jk.conf,mod_jk.conf調用workers.properties,配置虛擬主機.
文件說明 :

mod_jk.conf

主要定義mod_jk模塊的位置以及mod_jk模塊的連接日誌設置,還有定義worker.properties文件的位置.
worker.properties
定義worker的參數,主要是連接tomcat主機的地址和埠信息.如果Tomcat與apache不在同一台機器上,或者需要做多台機器上tomcat的負載均衡只需要更改workers.properties文件中的相應定義即可.

%APACHE_HOME%為你的安裝目

整合

1、準備下載下列文件:

Jdk1.5
下載地址: http://java.sun.com
tomcat 5.5.9
下載地址:http://jakarta.apache.org
apache_2.2.4-win32-x86-no_ssl.msi
下載地址: http://httpd.apache.org/download.cgi
mod_jk-apache-2.2.3.so

下載地址:http://archive.apache.org/dist/jakarta/tomcat-connectors/

2、安裝好Jdk、tomcat、apache后,加入mod_jk連接模塊,就是把mod_jk-apache-2.2.3.so文件重名為mod_jk.so文件並拷貝到%APACHE_HOME%"modules下

3、修改apache的配置文件:

為了保持httpd.conf文件的簡潔,把jk模塊的配置放到單獨的文件中來,就在httpd.conf中增加一行調用
代碼 include %APACHE_HOME%Apache2"conf"mod_jk.conf

4:配置mod_jk.conf
請注意使用絕對路徑
其實最關鍵的就是 第一條 第二條 和一條,如果要精簡,就保留這三條內容就可以了.
代碼


# Load mod_jk module

LoadModule jk_module "E:"Program Files"Apache Software Foundation"Apache2.2"modules"mod_jk.so"

# Where to find workers.properties

JkWorkersFile "E:"Program Files"Apache Software Foundation"Apache2.2"conf"workers.properties"

# Where to put jk logs

JkLogFile "E:"Program Files"Apache Software Foundation"Apache2.2"logs"mod_jk.log"

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,

JkOptions ForwardKeySize ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Send servlet for context /examples to worker named ajp13

#JkMount /servlet/* ajp13

# Send JSPs for context /examples to worker named ajp13

JkMount /*.jsp ajp13

JkMount /*.do ajp13

上面這一行我們設置了了 /*.jsp ajp13 就是說把所有.jsp結尾的文件都由ajp13這個worker交給tomcat處理了,如果應用被映射為一個.do的URL,這樣就會出錯.解決方法是再添加如下一行:
代碼
JkMount /*.do ajp13

5:配置apache2"conf"workers.properties
代碼

workers.tomcat_home=E:"Program Files"Apache Software Foundation"Tomcat 5.5

workers.java_home=E:"Program Files"Java"jdk1.5.0_08

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost #

worker.ajp13.type=ajp13 #

worker.ajp13.lbfactor=1 #
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost #本機,若上面Tomcat主機不為localhost,作相應修改
worker.ajp13.type=ajp13 #類型
worker.ajp13.lbfactor=1 #代理數,不用修改

第二部分:虛擬主機的配置
舉例配置2個vhost網站 一個是 localhost ,另一個是 www.ok.com
當然www.ok.com 是虛擬的,本地測試時,應該修改系統中的hosts文件,添加一行 127.0.0.1 www.ok.com
1:Apache 虛擬主機配置:
Httpd.conf文件添加
代碼
include D:"server"Apache2"conf"vhost.conf

而vhost.conf內容寫
代碼
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster at localhost
DocumentRoot "D:/server/Tomcat/webapps/ROOT"
ServerName localhost
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host dot example.com
DocumentRoot D:/server/www/
ServerName www.ok.com
ErrorLog logs/ok.com-error_log
CustomLog logs/ok.com-access_log common
<Location /server-status> # 這樣我可以看到apache伺服器狀態
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
Allow from www.ok.com


</Location>
</VirtualHost>

2:Tomcat虛擬主機配置
添加新的www.ok.com 虛擬主機,在tomcat安裝路徑"conf"server.xml的,找到<Engine>段,改為
代碼
<Engine>
<Host name=」localhost」 ……>
</Host>

<Host name="www.ok.com" debug="0" appBase="D:/server/www/" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." />
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="ok.com_log." suffix=".txt" timestamp="true" />
</Host>
</Engine>

3:測試虛擬主機效果
訪問http://localhost/ 應該可以看到原來的tomcat默認頁面.
寫一個 index.jsp
代碼
<html>
<title>
test jsp
</title>
<%
String showMessage="Oh My God!";
out.print(showMessage);
%>





[火星人 ] Apache http Server與Tomcat整合已經有2478次圍觀

http://www.coctec.com/docs/java/show-post-61785.html