整合apache 2.2.4 + Tomcat5 總結

 首先下載安裝apache和tomcat ,connectors等在http://apache.org上下。

整合apche和tomcat,主要兩種方案;

方案一:mod整合。採用jk2或jk任意一種connector整合, 建議用jk的mod整合,jk2由於開發者的原因可能對新版本的apache支持有問題

JK的安裝
把mod_jk_2.2.4.so拷貝到apche安裝目錄的/modules/下.

配置服務器整合:

1、配置Tomcat
查找tomcat目錄下的conf/workers.properties文件,並對比下方文本內容,如有不同以下方內容爲準修改。
workers.tomcat_home=d:/Tomcat #讓mod_jk模塊知道Tomcat的位置
workers.java_home=d:/Java/jre1.5.0_06 #讓mod_jk模塊知道jre的位置
ps=/
worker.list=ajp13 #模塊版本
worker.ajp13.port=8009 #工作端口,若沒佔用則不用修改
worker.ajp13.host=localhost #本機,若上面的Apache主機不爲localhost,作相應修改
worker.ajp13.type=ajp13 #類型
worker.ajp13.lbfactor=1 #代理數,不用修改

如果文件不存在則創建。並填充上述內容。

2、配置Apache
打開d:/Apache/Apache2/conf下的httpd.conf,在最後加入下面這段代碼並保存。
#設置Apache與Tomcat之間的連接,讓Apache遇到jsp文件時,在後臺將其交由Tomcat去處理
LoadModule jk_module modules/mod_jk_2.0.55.so
#此處mod_jk的文件爲你下載的文件
JkWorkersFile "d:/Tomcat/conf/workers.properties"
#指定tomcat監聽配置文件地址
JkLogFile "d:/Tomcat/logs/mod_jk2.log"
#指定日誌存放位置
JkLogLevel info

#設置虛擬主機
<VirtualHost localhost>
ServerAdmin localhost
DocumentRoot d:/test1
#您的站點項目所在路徑,應與tomcat中的目錄設置相同
ServerName localhost
DirectoryIndex index.html index.htm index.jsp
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
JkMount /servlet/* ajp13
#讓Apache支持對servlet傳送,用以Tomcat解析
JkMount /*.jsp ajp13
#讓Apache支持對jsp傳送,用以Tomcat解析
JkMount /*.do ajp13
#讓Apache支持對.do傳送,用以Tomcat解析
</VirtualHost>

#開頭的行爲註釋,可以刪除。此處的配置我是以設置虛擬目錄,重新指定了serverName,DocumentRoot路徑的方式配置站點,實際上,Apache的配置可以非常靈活,你也可以不採用虛擬目錄的方式,而直接去修改站點的默認配置,使用任意文本編輯工具,搜索如ServerName,DocumentRoot,ServerAdmin等相關項,然後將該項的配置根據你的實際情況進行修改即可。我建議大家可以多多嘗試不同的配置,這是一種很有樂趣的體驗。
所有的修改完成這後,再次執行d:/Apache/Apache2/bin/Apache.exe -t 如果看到"Syntax OK",說明你所有配置無誤,雙擊窗口的托盤中的圖標,然後點擊Start運行。
在地址欄中分別輸入http://localhost/,與http://localhost:8080/若結果相同,Apache與Tomcat整合成功

方案二:

apache2.2以上的版本,可以考慮用mod_proxy_ajp。

首先看一下httpd.conf中是否正確load了mod_proxy模組。如果沒有的話,重新編譯安裝apache22。mod_proxy_ajp的配置非常簡單。基於靈活性考慮,最好單獨在虛擬主機中配置。我的配置如下:
<VirtualHost *>
ServerName localhost
ProxyPass / ajp://localhost:8009/
#ProxyPass / http://localhost:8180/
ProxyPassReverse / ajp://localhost:8009/
#ProxyPassReverse / http://localhost:8180/
</VirtualHost>
說明:/表示把所有發往80端口的http訪問請求自動轉向到tomcat監聽的8080端口(FreeBSD port安裝的tomcat默認監聽8180端口)。lynx localhost,可以看到tomcat的welcome頁。說明安裝成功。
注意:由於/的設置把所有80端口的訪問都forward到了tomcat,所以這可能不是我們所希望的,這種情況下apache只是個轉發代理。一般情況下,我們希望apache同時能提供mod_perl、php功能。因此需要單獨爲jsp的應用配置URI映射。 配置同樣很簡單ProxyPass /myapp ajp://localhost:8009/,ProxyPassReverse /myapp ajp://localhost:8009/即可。
可以看到,比起前代的mod_jk來講,mod_proxy_ajp非常簡單方便。mod_jk的配置簡直是一場噩夢。哈哈,還等什麼,快升級吧。

方案三:用mod_jk2整合。

將文件mod_jk2.so 複製到Apache 的模塊目錄(%Apache%/Apache2/modules)中。
備份Tomcat 和Apache 的缺省配置文件,以防不測。
其次,編輯配置文件。具體的配置文件有四個,
它們分別是:httpd.conf、jk2.properties、server.xml、workers2.properties。

a、 修改ApacheRoot/Apache2/conf/httpd.conf 文件
1>修改web 主目錄,即將
DocumentRoot "D:/websrv/Apache2/htdocs" 改爲自己的web主目錄
eg:     DocumentRoot    "D:/websrv/myweb"
2>修改web 主目錄對應的目錄,即將
<Directory "D:/websrv/Apache2/htdocs">改爲
eg:     <Directory "D:/websrv/myweb" >
此目錄塊要與DocumentRoot的路徑對應,塊中的語法是對此塊對應Web主目錄的操作權限設置。
3>修改目錄缺省的web 文件,即將
DirectoryIndex index.html index.html.var 改爲
eg:      DirectoryIndex index.html index.html.var index.jsp
語法說明:當向Apache 發出請求時容器將順次去找index.html,如果沒有,將接着找index.htm,最後找index.jsp。
4>修改cgi-bin 所在目錄,即將
ScriptAlias /cgi-bin/ "D:/websrv/Apache2/cgi-bin/"改爲
ScriptAlias /cgi-bin/ "D:/websrv/myweb/cgi-bin/"
<Directory "D:/websrv/Apache2/cgi-bin"> 改爲
<Directory "D:/websrv/myweb/cgi-bin">
如果程序中需要用到cgi時修改以上兩處。
5>添加指定的虛擬目錄(別名),及其對應目錄的屬性
#這是測試用的文件夾,能執行jsp 文件。
Alias  /jj/           "D:/websrv/myweb/jj/"
<Directory       "D:/websrv/myweb/jj" >
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
</Directory>

     Alias  /chengxin/     "D:/websrv/myweb/chengxin/"
     <Directory              "D:/websrv/myweb/chengxin" >
        AllowOverride None
       Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
       Allow from all
     </Directory>
#在web主目錄myweb中添加了兩個測試應用程序jj和chengxin
語法說明:
 
      Alias  /web程序別名/     "程序根目錄/"                            ##別忘啦最後有“/”
      <Directory              "程序根目錄" >
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html                           對此程序的具體操作權限設置    
        AddHandler type-map var                                   
        Order allow,deny
       Allow from all
</Directory>
注意:
                   程序根目錄必須和%Tomcat5%/conf/server.xml中配置的虛擬目錄相吻合。
           6>修改缺省的字符集,使之支持中文,即將
AddDefaultCharset ISO-8859-1 改爲
AddDefaultCharset GB2312
            7>在文件最後添加如下內容,以加載jk2 模塊
<IfModule !mod_jk2.c>
LoadModule jk2_module modules/mod_jk2.so
</IfModule>

b、 修改Tomcat5Root/conf/jk2.properties 文件
在文件最後添加如下內容,打開shm 文件設置
#Shared memory directive
shm.file=ApacheRoot/Apache2/logs/jk2.shm
可以在ApacheRoot/Apache2/logs/下新建jk2.shm文件
c、 修改Tomcat5Root/conf/server.xml 文件
在apache 中對應指定的虛擬目錄,server.xml 中也應指定,所以在
  <!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0">
-->
的下面添加
<Context path="/jj" docBase="d:/websrv/myweb/jj" debug="0" reloadable="true"
crossContext="true"></Context>
<Context path="/chengxin" docBase="d:/websrv/myweb/chengxin" debug="0" reloadable="true"
crossContext="true"></Context>




d、 修改ApacheRoot/Apache2/conf/workers2.properties 文件
注意:如果此文件不存在,則在目錄ApacheRoot /Apache2/conf 下新建一個。
添加如下內容
#***************************************************************************
# only at beginnin. In production uncomment it out 必須在文件開頭定義
[logger.apache2]
level=DEBUG
#define the shared memory file 定義shm 文件
[shm]
file=ApacheRoot /Apache2/logs/jk2.shm    #指向Apache文件下的logs/jk2.shm文件
size=1048576
# Define the communication channel 定義信道
[channel.socket:localhost :8009]
tomcatId=localhost :8009
# define the worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
#jk2 的狀況,可通過http://localhost/status 查看
[status:]
info=Status worker, displays runtime information
channel=channel.socket:localhost:8009
# Uri mapping Uri 映射
#[uri:/path/*]會把http://域名/path/裏的所有請求發給tomcat。
#而[uri:/path/*.jsp]會把http://域名/path 裏的jsp 文件請求發給tomcat 處理。
#此path 可以是apache 的虛擬目錄,也可以是tomcat 的虛擬目錄,
#還可以是tomcat 的物理目錄,這兒是配置jk2 的關鍵,試試就知道了。
[uri:/status/*]
worker=status:localhost:8009
group=status:
#[uri:/*]                ###表示web主目錄下的所有請求都給TomCat處理
[uri:/jj/*.jsp]    ###表示web主目錄下的jj程序中所有jsp文件請求都給TomCat處理
[uri:/chengxin/*]     ###表示web主目錄下的changxin程序中所有請求都給TomCat處理
#[uri:/jsp/*.jsp]
worker=ajp13:localhost:8009
info=Map the whole webapp
注意:此文件中的8009端口設置必須與TomCatRoot/conf/server.xml文件中
       <Connector port="8009" 
               enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" />
對應。
到此已基本配置完成。

如果要通過配置虛擬主機的方法來訪問還要進行以下配置:
 以下配置的是一個IP對應多個域名的方法。
1>    在apacheRoot/apache2/conf/httpd.conf修改
            Listen   80                                     #監聽端口爲80
#NameVirtualHost  *:80 爲
NameVirtualHost 192.168.1.208:80
##################################Ip影射到程序主目
<VirtualHost 192.168.1.208:80>
#管理員Email
    ServerAdmin        [email protected]
    #jj  web程序目錄
DocumentRoot    d:/websrv/myweb/jj
#域名 
   ServerName         ccjg.test.com
  #日誌
 ErrorLog          logs/dummy-host.example.com-error_log
    CustomLog       logs/dummy-host.example.com-access_log common
#多個域名對應一個程序是可以在此添加
ServerAlias   ccjg.test.gov.cn
#注意:
#每在ServerName或ServerAlias添加一個域名時相應的就應該在
#TomcatRoot/conf/server.xml文件中添加相應的<Host>塊標記與之對應
#如果要在本機測試則在C:/WINNT/system32/drivers/etc/hosts須添加相應
#的IP對應於你的所設置域名,域名解析時用到
#eg:   192.168.1.208         ccjg.test.gov.cn
#           192.168.1.208         ccjg.test.com   
</VirtualHost>

<VirtualHost    192.168.1.208:80>
    ServerAdmin        [email protected]
#chengxin  web程序目錄
    DocumentRoot       d:/websrv/myweb/chengxin
    ServerName           chengxin.test.com
    ErrorLog                logs/dummy-host.example.com-error_log
    CustomLog             logs/dummy-host.example.com-access_log common
ServerAlias           ccjg.test.gov.cn
</VirtualHost>
以上是一個IP對應兩個web程序。
2>    在TomCatRoot/conf/server.xml中添加對應的<Host>塊
       <Host name="ccjg.test.com" debug="0" 
         appBase="d:/websrv/jj" 
         unpackWARs="true" autoDeploy="true"> 
        <Context path="" docBase="" debug="0"/> 
        <logger className="org.apache.catalina.logger.FileLogger" 
        directory="logs" prefix="cust1_log." suffix=".txt" 
        timestamp="true"/> 
</Host> 
<Host name="ccjg.test.gov.cn" debug="0" 
         appBase="d:/websrv/jj" 
         unpackWARs="true" autoDeploy="true"> 
        <Context path="" docBase="" debug="0"/> 
        <logger className="org.apache.catalina.logger.FileLogger" 
        directory="logs" prefix="cust1_log." suffix=".txt" 
        timestamp="true"/> 
        </Host>
到此OK

方案四:

mod_jk要與Apache版本相應,相應不代表相同,能用就行。

安裝Apache、Tomcat,把mod_jk放在任意目錄。

Tomcat的/conf/server.xml內<Engine..></Engine>中加入:

<Listener className="org.apache.jk.config.ApacheConfig" modJk="C:/Program Files/Apache Software Foundation/Apache2.2/modules/mod_jk-apache-2.2.3.so" />
註:指給modJK的路徑是我的路徑哦。

重新啓動Tomcat,其conf目錄內會產生auto及jk兩個目錄。把auto目錄中的mod_jk.conf 複製到jk目錄內,並把開展名.conf 改爲 conf-auto。

到Apache目錄,在其conf目錄內的httpd.conf中最後一行加入:
Include "C:/Program Files/Apache Software Foundation/Tomcat 5.5/conf/jk/mod_jk.conf-auto"

Apache重新啓動後,一切大功告成。

可參考:http://tomcat.apache.org/connectors-doc/howto/apache.html中【Using Tomcat auto-configure】一段,其中有說明:
The auto-configure works only for a single Tomcat running on the same machine where Apache (httpd) is running.
意即auto-configure只限於Apache和Tomcat在同一機器上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章