最近在弄服務器,剛開始只是裝載了tomcat,通過域名配置,端口設置,通過主域名訪問,完全沒有問題,但是之後想將2級域名配置的靈活一些,想到用Apache來做。其實配置Apache和Tomcat非常簡單,先要明白他倆之間的關係是關鍵:
apache:側重於http server tomcat:側重於servlet引擎,如果以standalone方式運行,功能上與apache等效 , 支持JSP,但對靜態網頁不太理想; apache是web服務器,tomcat是應用(java)服務器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認爲是apache的擴展,但是可以獨立於apache運行。 換句話說,apache是一輛卡車,上面可以裝一些東西如html等。但是不能裝水,要裝水必須要有容器(桶),而這個桶也可以不放在卡車上。
這個比喻已經非常深刻和形象了,我想你該明白了。
--------------------------------------begin---------------------------------
下面我就將配置的步驟下下來:
準備工作:
1、 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
下載地址:http://apache.etoak.com//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
2、 apache-tomcat-6.0.20.zip(免安裝版-綠色版)
下載地址:http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip
3、 jdk1.6.0_18
下載地址:
如果只是應用的話,也可以選擇安裝JRE,因爲JRE比較小:)
4 JK:mod_jk-apache-2.2.2.so
下載地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.18/mod_jk-apache-2.2.2.so
注意JK的版本一定要與Apache版本相同。如果你的版本與我的不同,可以去官網下載,有多種版本,適用於各種操作系統,下載適用的既可
開始安裝:
- 安裝JDK:安裝JDK和配置環境變量,我就不在這多囉嗦了,一開始拿到機器你就應該安裝好了吧。
- 安裝Apache:安裝之前,你先要查看一下本機器中的端口情況,如果有佔用80端口的進程,需要關了,因爲Apache要安裝在80端口上,默認訪問,除非你設置到別的端口。安裝好之後,apache會自動啓動,然後你訪問:http://localhost,就可以訪問到apache,頁面:It works!
- 安裝Tomcat:其實你可以用綠色版的,不需要特別安裝,關機是配置,最好目錄放在Apache下:比如我的Apache的目錄是:E:\Apache\Apache2.2;而tomcat的位置是:E:\Apache\tomcat\1-apache-tomcat-6.0.35;E:\Apache\tomcat\2-apache-tomcat-6.0.35;這兩個tomcat。
- 配置過程:
- 修改httpd.conf
我的Apache安裝在E:\Apache\Apache2.2,找到conf目錄下的httpd.conf,在文件的最後一行添加
include "E:\Apache\Apache2.2\conf\mod_jk.conf"
-
新建mod_jk.conf文件,內容如下:
-
LoadModule jk_module modules/mod_jk-apache-2.2.2.so JkWorkersFile conf/workers.properties #指定那些請求交給tomcat處理,"controller"爲在workers.properties裏指定的負載分配控制器名 JkMount /*.jsp controller
-
- 將下載的JK插件mod_jk-apache-2.2.2.so複製到Apache安裝目錄的modules目錄下。
- 新建並編輯workers.properties文件,內容如下:
#server worker.list = controller #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #========tomcat2======== worker.tomcat2.port=8010 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,負載均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=false worker.controller.sticky_session_force=1 #worker.controller.sticky_session=1
- 這裏可以配置任意多個Tomcat,2個本地,還可以配置遠程的:
#========tomcat3======== worker.tomcat3.port=13009 worker.tomcat3.host=192.168.0.80 worker.tomcat3.type=ajp13 worker.tomcat3.lbfactor = 1
遠程的這個我沒有試,應該是可以的。
- 修改httpd.conf
配置Tomcat
- 要注意的是:tomcat只是8080端口要改,因爲是兩個tomcat,他們的8009端口,還有8005端口需要有區別,第一個是8009,第二個就是8010,下面就3、4就是具體說明:
-
AJP13的connector的poat和jvmRoute名稱和workers.properties中配置對應。
-
由於截圖面積有限,還需要保證本地2個本地Tomcat配置server的port,connector爲http1.1的port都不相同。
測試
建立測試項目
建立test項目,需要在項目的web.xml中添加<distributable/> 建立test2.jsp,內容如下(網上都用這個測試,我就省的麻煩了): <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> <% out.println("<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 屬性設置 String dataName = request.getParameter("dataName"); if (dataName != null && dataName.length() > 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.println("<b>Session 列表</b><br>"); System.out.println("============================"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"<br>"); System.out.println( name + " = " + value); } %> <form action="test2.jsp" method="POST"> 名稱:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> </body> </html>
這時候,別啓動Apache和3個Tocmat服務器,這些Tomcat啓動順序隨意,如果有問題,比如:Apache啓動不起來,那你就用cmd來啓動Apache。如:
E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 487 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not i
ncluded in the server configuration
這個是說:我487行的地址重寫有問題:
RewriteEngine on 這個出錯了
解決方案:在httpd.conf 中,也就是在該文件中查詢:“rewrite_module”這個,發現這個:“#LoadModule rewrite_module modules/mod_rewrite.so”已經被註釋了,將該註釋去掉,打開地址重寫的配置。
重新啓動Apache:
E:\Apache_Test\Apache2.2\bin>httpd.exe
Syntax error on line 490 of E:/Apache_Test/Apache2.2/conf/httpd.conf:
RewriteCond: bad flag delimiters
490行出現問題,那我把地址重寫的代碼放出來:
487 RewriteEngine on
488 RewriteCond %{HTTP_HOST} ^aaa.***.com [NC]
489 RewriteRule ^/$ http://aaa.***.com/action/garden [L]\
490 RewriteCond %{HTTP_HOST} ^www.***.com [NC]
491 RewriteRule ^/$ http://www.***.com/action/testyemian [L]
看發現“\這個符號不應該存在。
將這個去掉,重新啓動。apache啓動成功“http://localhost/”,訪問到
It works!
然後啓動兩個Tomcat;可以先測試單獨的Tomcat的啓動情況,帶上端口就可以訪問了。如果訪問成功,繼續。下面圖片說明一切,你懂得。
然後查看tomcat,兩個tomcat中的值的變化:
兩個不同的tomcat得到了Session複製。
以上的測試說明,集羣中的session已經共享,每個集羣對於同一訪問均有相同的session,而且session中存儲的變量也複製了。
目前,就可以了,還有更多的內容如:節點插拔測試,等等稍後繼續。
我的這篇博客,是經過了自己親手實現的,因此,如果你有什麼問題,可以給我留言。
歡迎你的轉載,請標明出處:http://blog.csdn.net/vipzyj/article/details/8783750