談談我對apache+tomcat+jk2整合的理解
發表于:2007-05-25來源:作者:點擊數:
標簽:
我也是參照這里的大俠的文章來進行整合的,關于整合的文章特別是精華基本都看了。但是對于一個菜鳥來說,真的有好多地方看不懂,不僅這些整合的文章,其實對于好多帖子也有這個感覺,所以很希望這些高手能夠多做一些解釋和說明,以解我們心中之惑。 下面談談
我也是參照這里的大俠的文章來進行整合的,關于整合的文章特別是精華基本都看了。但是對于一個菜鳥來說,真的有好多地方看不懂,不僅這些整合的文章,其實對于好多帖子也有這個感覺,所以很希望這些高手能夠多做一些解釋和說明,以解我們心中之惑。
下面談談我對整合理解與疑惑,有太多的不明白,所有其中有很多的臆想成份,請高手指正與解惑。
整合的目的(完全臆想)
------------------------------------------------------------------------------
apache 和 tomcat都可以做為獨立的WEB
服務器來用,apache功能強大、高效,但并不能支持JSP及serlet,而tomcat正相反,所以要把它們結合起來。
通過在apache中加載整合模塊和進行設置,apache就能夠根據url,把不屬于自己的請求轉給tomcat.
版本的選擇的相關性:
------------------------------------------------------------------------------
1.Apache
httpd2.0.x,對于與apache1.3.x等版本有什么區別不知道,應該有個飛躍吧,連名字都改成httpd了。而我們選擇了用JK2整合,JK2是針對apache2.0的思想
開發的(英語太差,見原文:JK2 has been developed with Apache 2.0 in mind),所以選擇用httpd2.0.x。
2.整合方式-JK2
為什么選擇JK2呢?(JK is a replacement to the elderly mod_jserv. It
was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.The newest JK2 is a refactoring of JK . The native part has been completly restructured and the configuration has been simplified a lot.)我只看重了最后一句話,呵呵。在JK的文檔中有關于以前的整合模塊及JK、JK2功能的詳細描述。
3.Tomcat5.0、J2SDK1.4.x
能夠支持JAVA,JSP,及Servlet的較新標準吧?它們之間應該有一定的關聯,據說tomcat5及JDK1.4對中文的支持方式改變了不少,現在不用進行復雜的設置了就可以很好的使用中文,但對于針對以前JSP標準開發的頁子的中文
兼容性不太好。
編譯安裝過程中的注意事項:
-------------------------------------------------------------------------------
1.Apache
必須編譯成允許動態加載模塊的方式,即在[b:b6d67f26da]configure時要加 --enable-so選項[/b:b6d67f26da],因為將來要加載mod_jk2這個整合模塊。
假設apache的安裝目錄為PathofApache,則編譯的模塊在PathofApache/modules下,配置文件在PathofApache/conf下。
2.tomcat
只會用編譯好的版本。解壓、釋放包就行了。(聽說tomcat是JAVA寫的,不知道用那個
ANT編譯有什么優勢也沒試成功過),假設tomcat安裝目錄為PathOfTomcat。
3.JDK
我用的是二進制版本,直接運行,自己解壓釋放包。(如果用那個RPM包我不知道JAVA_HOME怎么設,呵呵)設置JAVA_HOME和CLASSPATH環境變量。JAVA_HOME也可以不設置而在PathOfTomcat/bin/catalina.sh中賦值,CLASSPATH目前我還沒設置,也許在JSP中要用到JAVA標準類的時候要用到。
4。JK2模塊編譯
假設JK2包釋放后目錄改名為PathOfJK2,且當前目錄為PathOfJK2([b:b6d67f26da]參考JK文檔,注意關于編譯的部分在JK部分有說明,而默置要看JK2部分,因為不同的整合方式有很大的不同。http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/
[/b:b6d67f26da])
cd jk/native2
chmod +755 buildconf.sh
./buildconf.sh (因為buildconf.sh沒有執行權,所以要改,但“零二年的夏天”告訴我只要 sh buildconf.sh就可以執行了)
./configure --with-apxs2=PathOfApache/bin/apxs
這個apxs在apache的安裝目錄的bin下,所以要先裝apache。據說只有編譯安裝的apache才有這個文件,rpm包安裝的沒有這個文件,如果要給rpm包安裝的apache編譯整合模塊,要找一個相同版本的編譯一下用然后再刪掉,版本號要完全相同,否則編譯出來的模塊不能用。
還有兩個參數我沒有,英文的說明也沒看太懂,就在JK的文檔中有說明:
--with-apache=DIR,DIR is the path where apache sources are located. The apache sources should have been configured before configuring mod_jk. DIR is something like: /home/apache/apache_1.3.19 It builds a static Apache module.
--enable-EAPI,This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: "this module might crash under EAPI!" when loading mod_jk.so in httpd. Not needed when --with-apxs has been used
另外,我在執行configure的時候提示有錯誤,好像是關于路徑的,我就先啟動了tomcat,執行通過。(也許是我沒有設置關于tomcat目錄的環境變量的原因)
make
make install
所有的文檔都說如果發布不成功,那么要手工發布,我也是手工發布的:
cp PathOfJK2/build/jk2/apache2/mod_jk2.so PathOfApache/modules/
配置文件的修改
-------------------------------------------------------------------------------
[b:b6d67f26da]JK2所用的配置文件有2個:
jk2.properties,默認要放在PathOfTomcat/conf中
workers2.properties默認要放在PathOfApache/conf中[/b:b6d67f26da]
這兩個文件的作用真的不明白,jk2.properties可能是定義tomcat與apache的通訊端口等,workers2.properties可能是告訴apache有哪些目錄是tomcat支持的。
1.在PathOfTomcat/conf中有tomcat的主配置文件server.xml和JK2的配置文件jk2.properties。
[b:b6d67f26da]實際上我對這兩個文件沒有做任何修改[/b:b6d67f26da],而jk2.properties缺省就是空的??戳丝丛趕erver.xml中起作用的可能就是在第一個后面緊挨著的對于整合在起作用吧,沒有應該加上。
<!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
<Connector port="8009" enableLookups="false" redirectPort="8443" de
bug="0"
protocol="AJP/1.3" />
2.在PathOfApache/conf中有apache的配置文件httpd.conf,及JK2配置文件workers2.properties
[b:b6d67f26da]修改httpd.conf,只加入:LoadModule jk2_module modules/mod_jk2.so[/b:b6d67f26da]
關于workers2.properties,引用JK文檔例子中最小配置如下:
# Define the communication channel
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009
# Map the Tomcat examples webapp to the Web server uri space
[uri:/examples/*]
info=Map the whole webapp
這個/examples應該是tomcat下的路徑而不是apache的,但在這里做了映射,這個URL就能被apache接受并轉給tomcat,而不用加tomcat的端口號了。
這樣就完成了一種整合方式,這可能是最簡單但很少用的配置方法吧
——————————————————————————
還有一種配置的方法很實用,但有一點地方不明白,適合做虛擬主機。
1.把apache與tomcat都做虛擬主機,并且相同的主機指向相同的根目錄
2,默認情況下:jk2.properties可為空,workers2.properties不用做地址映射(?)
3.除了做虛擬主機,還要做如下修改
http.conf的修改
在虛擬主機之前加入
<Directory ~ "/WEB-INF/">
Order allow,deny
Deny from all
</Directory>
#因為apache與tomcat指向相同的目錄,所在要禁止對WEB-INF的訪問。
在虛擬主機的配置中
<Location ~ "/*.jsp|/*/servlet/*">
JkUriSet worker ajp13:localhost:8009
</Location>
#這可能是做映射,將目錄中的jsp和servlet由tomcat解析。
server.xml的修改
在虛擬主機的host中加入
<Context path="" docBase="" debug="1"/>
(這個tomcat很奇怪,不像apache只要指定DocumentRoot,那么網站的邏輯根目錄就是DocumentRoot指定的了,而tomcat用appBase指定的應該叫什么呢?要用上面的一句將appBase指定的目錄聲明為根目錄,appBase下其它目錄默認情況下就是網站邏輯子目錄)
關于虛擬主機整合的配置,JK文檔的例子說得很清楚,或看本版的一篇精華。
------------------------
我就理解這么多,對于jk2.properties,workers2.properties,tomcat,apache里的配置參數根本很少了解,我想把它們理解了也許就明白了。。。。。。
誠惶誠恐,請大俠指正,以免害人
icekernel 回復于:2004-04-17 11:15:20
|
server.xml
<Context path="" docBase="/path/yourjsp" debug="0" reloadable="true"
crossContext="true"></Context>
這里應該是這樣的吧 docBasej就是你所要定制的目錄
|
只愛一點點 回復于:2004-04-17 11:37:21
|
<Context path="" docBase="/path/yourjsp" debug="0" reloadable="true"
crossContext="true"></Context>
這個設置類似做虛擬目錄,我也不懂。是把/path/yourjsp指定為根嗎?但/path/yourjsp是根對于appBase指定的位置的?
也就是說將appBase指定的目錄中的path/yourjsp目錄指定為根目錄?
但如果<Context path="" docBase="" debug="1"/>
這樣是不是就將appBase目錄指定為根了呢?
|
icekernel 回復于:2004-04-17 14:01:35
|
是把/path/yourjsp
這個指定為根
<Context path="" docBase="" debug="1"/>
這樣是不是就將appBase目錄指定為根了呢?
對是把$tomcat/webapps指定為根
|
jhsea3do 回復于:2004-04-17 21:09:47
|
邏輯,物理
相對,絕對
對于配置文件來說,url是邏輯地址,文件采用物理地址
相對地址是針對配置文件的絕對物理地址(或預制變量比如$catalina.home)而言,絕對呢就是前面有根標記"/"的地址了
<Context path="" docBase="/path/yourjsp" debug="0" reloadable="true"
crossContext="true"></Context>
的寫法是正確的,但是如果你了解xml的話,你應該這樣寫
<Context path="" docBase="/path/yourjsp" debug="0" reloadable="true"
crossContext="true" />
或者
<Context>
<path></path>
<docBase>/path/yourjsp</docBase>
<debug>0</debug>
<reloadable>true</reloadable>
<crossContext>true</crossContext>
</Context>
這些都相當于對變量進行賦值
如同你在<host />標簽中已經指明host的名稱為localhost,那么你的站點URL就是http://localhost,而<path />標簽是指明其后對象a的uri的起點為$path,如果$path=/pathA,那么uri為/pathA/a,那么和前面站點url在一起就成為了http://localhost/pathA/a,如果$path=NULL,你就可以理解了
<docBase />我就不費口舌了
|
icekernel 回復于:2004-04-18 07:01:15
|
嘿嘿 還是樓上地 寫法規范
|
只愛一點點 回復于:2004-04-18 16:02:09
|
呵呵,以前看到兩種方式覺得怪怪的,原來如此啊。
多謝版主加精。很慚愧,都是看以前的文檔還有JK的文檔,自己并沒有把配置讀通,好多基本的都不理解。
不過有時間我會努力看的,把一些初學、業余的、高手懶得寫的東西補充好,使大家入門更容易些、理解得更多些。
我知道真正的掌握還得靠自己,但是對于初學者來說,比如我英文的理解字面意義都很難,看中文的也不知所云,所以還是希望高手能多些解釋,使我們能更早的入門,這樣才能自己看吧。比如上面的jhsea3do兄能參加討論就很好啊,請高手少一些“不屑一顧”,呵呵
多謝。
|
noah007 回復于:2004-04-18 22:54:42
|
很高興看到這樣的帖子,這才是技術論壇應該具備的氣氛。
不好意思,我水了下,大家繼續。
|
自由狼-臺風0 回復于:2004-06-05 06:47:06
|
編譯那步出錯,把錯誤記錄抓出來了,但是不知道如何解決。
[code:1:fd10aa5652]
../../common/jk_channel_socket.c:74:2: #error "jk_channel_socket is deprecated"
make[1]: *** [../../../build/jk2/apache2/jk_channel_socket.lo] Error 1
make: *** [jk2-build] Error 1
[/code:1:fd10aa5652]
|
goncha 回復于:2004-06-05 17:22:54
|
看了樓主的帖子,發現還是用socket來鏈接apache和tomcat的,不知有沒有試過inprocess的模式運行apache和tomcat。這種模式下我沒有成功過。
|
只愛一點點 回復于:2004-06-08 13:02:32
|
呵呵,不懂。
只是為了做作業才胡亂看了點東西做了一下。
|
雙眼皮的豬 回復于:2004-06-11 01:01:07
|
可通過ajp13或者jni來做,不過好象有了ajp14啦~hoho~
|
大菠蘿 回復于:2004-06-13 15:07:06
|
可以用mod_jk2來做簡單的負載平衡
|
xiaohe83 回復于:2004-06-14 21:29:29
|
如把/path/yourjsp 指定為根,那WEB-INF/classes是否也該放在/path/youjsp目錄下?
|
jhsea3do 回復于:2004-06-14 22:48:56
|
每建立一個webApp項目就需要為其建立一個WEB-INF目錄,存放相關的類庫和配置文件~
|
原文轉自:http://www.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|