???????????????在網上找了一些文檔,還是覺得不是很清楚,自己走了些彎路,才把這個配置好,還是寫下來吧,以備后查。
1.??
目標
使用
apache
和
tomcat
配置一個可以應用的
web
網站,要達到以下要求:
1、?
Apache
做為
HttpServer
,后面連接多個
tomcat
應用實例,并進行負載均衡。
2、?
為系統設定
Session
超時時間,包括
Apache
和
tomcat
3、?
為系統屏蔽文件列表,包括
Apache
和
tomcat
2.??
安裝
tomcat
2.1.
下載,解壓
tomcat
不要下載安裝版
,
下載地址
http://tomcat.apache.org/
2.2.
配置
tomcat
2.2.1. ???
配置
server
的關閉口
我們需要在一臺機器上跑
2
個不同的
tomcat
,需要修改不同的
tomcat
的關閉口,避免出現端口被占用的情況。在
server.xml
中找到
server,
將:
<Server port="8005" shutdown="SHUTDOWN">
改為
<Server port="XXXX" shutdown="SHUTDOWN">
XXXX
在這里表示不同的端口:我的兩個
tomcat
分別使用
8035
,
8045
?
注意:這里之所以要配置不同的
tomcat
關閉口,只是因為我們使用了多個
tomcat
,其實用一個
server
多個實例也可以。
2.2.2. ???
配置
service
我們需要對不同的
tomcat
的
service
取不同的名字,在
server.xml
中找到:
<Service name="Catalina">
改為:
<Service name="XXXX">
兩個
service
分別為
tomcat6
和
tomcat5
2.2.3. ???
配置
Connector
這個部分主要是要改兩個
Connector
,當然前提是你的
tomcat
只有兩個
Connector
。
修改
ajp1.3
的端口:
找到:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改為:
<Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" />
兩個
Service
的
ajp/1.3
的端口分別為:
8019
,
8029
修改
http
的端口:
找到:
<Connector port="8080" protocol="HTTP/1.1"
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
改為:
<Connector port="XXXX" protocol="HTTP/1.1"
?????????????? maxThreads="150" connectionTimeout="20000"
?????????????? redirectPort="8443" />
兩個
Service
的
ajp/1.3
的端口分別為:
8060
,
8070
2.2.4. ???
配置
Engine
Engine
主要是配置
jvmRoute
屬性,找到:
<Engine name="Catalina" defaultHost="localhost">
改為:
<Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost">
兩個實例分別為:
tomcat6
和
tomcat5.
2.2.5. ???
配置公用性
Context
如果有
Context
是多個系統公用的,比如圖片等的存放地,可以做個配置:
在
Host
中增加:
<Context path="/image" docBase="D:\webRoot\image" debug="0" reloadable="false" crossContext="true">
</Context>
2.2.6. ???
屏蔽文件列表
打開
tomcat
目錄下的
conf/web.xml
,
找到:
<servlet>
??????? <servlet-name>default</servlet-name>
??????? <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
??????? <init-param>
??????????? <param-name>debug</param-name>
??????????? <param-value>0</param-value>
??????? </init-param>
??????? <init-param>
??????????? <param-name>listings</param-name>
??????????? <param-value>true</param-value>
??????? </init-param>
??????? <load-on-startup>1</load-on-startup>
??? </servlet>
將
listings
參數改為
false;
2.3.
配置應用
(web.xml)
對系統應用做些控制。
配置
session
過期時間,大多數網站用戶都只是做些瀏覽性的操作,為了減輕服務器負載壓力,我們將
session
超時時間從默認的
30
分鐘變為
5
分鐘。
在
web
應用程序的
web.xml
中
servlet-mapping
之后增加如下一段:
<session-config>
??? <session-timeout>5</session-timeout>
</session-config>
3.??
安裝
Apache
3.1.
下載、安裝
Apache
下載地址
http://httpd.apache.org/download.cgi
下載后點擊安裝
msi
文件。
安裝的時候沒有什么特別需要注意的地方,按照默認就行了。是否安裝為
service
看具體情況而定。
3.2.
下載、安裝
Apache
、
tomcat
的
Connector
http://tomcat.apache.org/download-connectors.cgi
注意,很多網站上都介紹是
JK2
,可能是覺得
JK2
比
JK
要新吧,其實
JK2
已經停止研發了,建議使用
jk1.2
。
下載壓縮包,之后將
module
目錄中的
mod_jk-apache****.so
文件放入
/module/
目錄下。
3.3.
配置
Apache
(
httpd.conf
)
3.3.1. ???
配置端口:
找到
Listen 80
改為
Listen **
當然如果不需要改的話,就不用改了。正常情況無須更改。
3.3.2. ???
配置
DocumentRoot
找到
DocumentRoot
段,將其改為:
DocumentRoot "E:/MyWebsite"
這里的
"E:/MyWebsite"
指的是你的
web
程序的根路徑,視具體應用而定。
3.3.3. ???
配置
serverName
找到
serverName
這個段,將其配置為你的
ServerName
如果沒有配置為域名,配為
IP
也可以,此處還不是很清楚,多虛擬主機的情況的配置。
3.3.4. ???
配置虛擬主機
<VirtualHost *:80>
??? ServerAdmin flyffa@gmail.com
??? DocumentRoot?????? E:/MyWebsite
??? ServerName localhost
??? DirectoryIndex index.html index.htm index.jsp
??? ErrorLog logs/error_log
??? CustomLog logs/access_log common
??? ErrorDocument 404 /sys/logon.jsp
</VirtualHost>
3.4.
配置
JK
方式的負載均衡
3.4.1. ???
配置
module
我們需要與
tomcat
做連接,所以要把
tomcat
的
connector
的模塊配置進去。
在
LoadModule
部分加入:
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
-加載模塊
(根據網友于偉的建議,補上一段,mod_jk的版本會根據大家下載的版本不同,有不同的名字,請大家注意)
這個
so
是我下載的版本,個人可以根據自己下載的文件名加以配置
JkWorkersFile conf/workers.properties
-指定
connector
的配置文件名稱
JkLogFile logs/mod_jk.log
-指定
connector
的日志文件名稱
JkLogLevel info
-指定
connector
的日志等級
3.4.2. ???
配置
worker
列表
(conf/workers.properties)
定義列表
worker.list=tomcat6,tomcat5,loadbalancer
定義一個名為
“loadbalancer”
的
worker
其作為對多個
Tomcat
進程的負載平衡使用:
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat5, tomcat6
(
負載平衡類型的
worker
并不與
Tomcat worker
通訊,它負責管理這些
Tomcat worker
。
)
定義多個
worker
列表
# Set properties for tomcat6 (ajp13)
worker.tomcat6.type=ajp13
worker.tomcat6.host=localhost
worker.tomcat6.port=8019
worker.tomcat6.lbfactor=50
worker.tomcat6.cachesize=10
worker.tomcat6.cache_timeout=600
worker.tomcat6.socket_keepalive=1
worker.tomcat6.reclycle_timeout=300
?
# Set properties for tomcat5 (ajp13)
worker.tomcat5.type=ajp13
worker.tomcat5.host=localhost
worker.tomcat5.port=8029
worker.tomcat5.lbfactor=50
worker.tomcat5.cachesize=10
worker.tomcat5.cache_timeout=600
worker.tomcat5.socket_keepalive=1
worker.tomcat5.reclycle_timeout=300
注意:
lbfactor=
50
(
當此
Tomcat worker
被用于一個負載平衡
worker
使用時,此屬性將被使用。它定義了此
worker
的負載平衡權值。
)
cachesize=
10
(
當在多線程的
web server
(例如
apache2.0
、
IIS
、
Netscape
)中使用
JK
時,此屬性是有效的。如果將
cachesize
的值設置為較高的值,這些支持多線程的
web server
將獲得很好的處理能力。如果此屬性不被設置,則連接
cache
特性將失效。
)
3.4.3. ???
配置
Apache
到
tomcat
的橋接
在
DocumnetRoot
片段下加入
JkMount /*.jsp tomcat6
JkMount /*.do tomcat6
JkMount /*Servlet tomcat6
這里只是簡單的將
apache
的請求轉到其中的一個
tomcat
中,形成橋接,至于負載均衡的時候,就無須進行這步操作,直接啟動負載均衡。啟動負載均衡見下一節。
3.4.4. ???
啟動負載均衡
在
DocumnetRoot
片段下加入
JkMount /*.jsp loadbalancer
JkMount /*.do loadbalancer
JkMount /*Servlet loadbalancer
-指定對所有的請求啟動負載均衡,這里的
loadbalancer
是定義的
worker
的名字
這里我在配置的時候犯了兩個錯誤:
第一是沒有配置
JkWorkersFile conf/workers.properties
,以為
Apache
會自動認識(其實
apache
是自動產生了一個叫做
ajp13
的
worker
,指向本機的
8009
端口)。
第二是以為
JkMount
語句中出現
loadbalancer,ajp13
之類的是系統設定的東西,其實都是在
workers.properties
文件中定義的,結果出現名字不匹配的情況。后來配置了
JkLogFile logs/mod_jk.log
之后看到錯誤日志才明白。
3.5.
配置
Proxy
方式的負載均衡
使用
Apache2.1
以上的版本,就可以用
mod_proxy_ajp
來完成負載均衡的配置,不過到目前為止,沒有看到如何讓
Apache
負責靜態部分,
tomcat
負責動態部分的配置方式,只能用
path
進行區分分發請求。如:在虛擬主機的配置中增加:
ProxyPass / ajp://localhost:8019/
ProxyPassReverse / ajp://localhost:8019/
而形如:
ProxyPass /*.jsp ajp://localhost:8019/
ProxyPassReverse /*.jsp ajp://localhost:8019/
這樣的配置是不能通過的。
請高手指教。