• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    原創:Tomcat和Apache的集成

    發布: 2007-6-08 22:43 | 作者: seanhe | 來源: | 查看: 31次 | 進入軟件測試論壇討論

    領測軟件測試網
    [b:820f207fd7]Connector的選擇[/b:820f207fd7]
       選擇合適的Connector對于性能、配置的方便性有很重要的影響,目前大致上有JK1。x, JK2, mod_webapp三種connector可以使用。 JK使用比較廣泛。JK2是JK1.x的改進,比較新。但是不太容易配置,相關的文檔也比較少。此外,JK可以支持其他Web服務器和tomcat的集成。 但mod_webapp不支持。 因此,目前JK1.x是最好的選擇。
    獲得JK
    [b:820f207fd7]使用二進制版本[/b:820f207fd7]
    如果你對手工編譯源代碼心有余悸,使用二進制版本也許是個明智的選擇。你可以從http://apache。linuxforum。net/dist/jakarta/tomcat-connectors/jk/binaries/下載JK1.x的最新版本。
    然而,不幸的是二進制版本的JK和Apache的版本是捆綁在一起的,如果你使用了比較新的Apache(比如httpd-2.0.29)的話,往往很難找到對應的二進制版本的JK。
    [b:820f207fd7]手工編譯源代碼[/b:820f207fd7]
    對于不同的操作系統和Apache的版本,如果沒有預編譯好的JK,則需要進行手工編譯。除了Linux以外,其他操作系統一般不會安裝編譯環境。這時你還需要安裝編譯器。典型的例子是在Solaris上安裝GCC,或是在Windows上安裝Visual C++。另外,通常Open Source的軟件一般都是用GNU的autoconf、automake生成自動配置腳本和Makefile的,JK也不例外。除了Linux以外的Unix系統中的make不一定能夠兼容這些腳本。 所以如果你碰到這些問題就需要安裝gmake。下面以Solaris8為例說明如何安裝配置編譯環境:
    在Solaris8中系統自帶的make不能兼容automake產生的某些Makefile。
    需要的軟件包:
    gcc-3.3-sol9-sparc-local.gz
    make-3.80-sol8-sparc-local.tar.gz
    所有需要的軟件包都可以在www.sunfreeware.com上下載到。
    解壓縮:
    [code:1:820f207fd7]$gunzip gcc-3.3-sol9-sparc-local.gz
    $gunzip make-3.80-sol8-sparc-local.gz[/code:1:820f207fd7]
    用pkgadd安裝,需要root權限:
    [code:1:820f207fd7]#pkgadd -d gcc-3.3-sol9-sparc-local
    #pkgadd -d make-3.80-sol8-sparc-local[/code:1:820f207fd7]用pkgadd安裝后,通常gcc, make會被安裝在/usr/local/bin目錄下。這是需要讓gmake
    成為系統默認的make。檢查PATH環境變量,確保/usr/local/bin目錄的位置在Solaris8自帶的make的bin之前:
    [code:1:820f207fd7]$which make
    /usr/ccs/bin/make
    $echo $PATH
    /usr/bin:/usr/ccs/bin:/usr/local/bin[/code:1:820f207fd7]
    如果發現gmake還不是系統默認的make,可以修改/etc/profile調整PATH。但有一種更簡單有效的方法,在/usr/bin目錄下建一個到/usr/local/bin/make的符號連接make,這樣就能使gmake成為系統默認的make了:
    [code:1:820f207fd7]# cd /usr/bin
    # ln -s /usr/local/bin/make make[/code:1:820f207fd7]同樣的技巧可以解決一些Perl腳本對perl解釋器可執行文件路徑引用的不正確。如某個perl腳本的頭信息有#!/usr/local/bin/perl -w但Perl在系統上被安裝在/usr/bin/目錄下。這時需要在
    /usr/local/bin/下建立一個到/usr/bin/perl的符號連接perl。
    編譯完JK后,把它安裝到apache中去,執行:
    [code:1:820f207fd7]# make install[/code:1:820f207fd7]如果不成功,可以手工把mod_jk.so拷貝到apache的modules目錄下。
    [b:820f207fd7]配置[/b:820f207fd7]
    在具體動手配置之前應該考慮一下你集成的目標:僅僅是簡單的把某個subcontext由tomcat處理,還是更高層次的動態/靜態內容整合?是否允許HTTPS的轉發;是否要進行負載平衡?具體配置的復雜度會因你的集成目標不同而大相徑庭。

    假定我們的集成目標是:
    1. 所有的靜態資源由Apache處理
    2. 所有的動態資源由Tomcat處理
    [b:820f207fd7]配置Tomcat[/b:820f207fd7]
    apache和tomcat整合大致上有三種方式:
    1. 在apache進程中運行tomcat來處理動態內容
    2. 通過ajp13協議,apache將動態內容的請求轉發給tomcat
    3. 使用本地高速Unix domain socket,apache將動態內容的請求轉發給tomcat

    方式2可以將apache和tomcat分布在不同的機器上,從而可以實現負載平衡。方式3速度比較快,當apache和tomcat分布在相同的機器上時可以考慮使用。
    本文以方式2的為例說明tomcat和apache的集成。
    為了能處理ajp13請求,tomcat需要起一個服務。 這是通過在tomcat的server.xml中定義一個Connector來實現的。 在最新的tomcat4.1.30版本中該Connector默認情況下是啟用的。如果沒有啟用在server.xml加入
    [code:1:820f207fd7]    <Connector className="org。apache。coyote。tomcat4。CoyoteConnector"
                   port="8009" minProcessors="5" maxProcessors="75"
                   enableLookups="true" redirectPort="8443"
                   acceptCount="10" debug="0" connectionTimeout="20000"
                   useURIValidationHack="false"
                   protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>[/code:1:820f207fd7]
    啟動tomcat, 檢查ajp13服務是否運行
    netstat -a | grep 8009
    或則查看tomcat標準輸出上是否有類似的輸出:
    [code:1:820f207fd7]info: JK2: ajp13 listening on /0.0.0.0:8009
    2004-5-22 14:50:35 org.apache.jk.server.JkMain start
    info: Jk running ID=0 time=20/200  config=D:\Tomcat4.1\conf\jk2.properties[/code:1:820f207fd7]
    [b:820f207fd7]配置Apache[/b:820f207fd7]
    配置完Tomcat后,進行Apache的配置。首先,我們需要確定整個web應用所在的context,確定了context也就能確定用戶通過什么樣的URL可以訪問該web應用。比如,網站為www.example.com, 如果web應用的context為purchase,那么用戶可以通過URL http://www.example.com/purchase訪問該應用;如果web應用的context為/,那么用戶可以通過URL http://www.example.com訪問該應用。一般而言,將web應用的context設定為/可以方便用戶。如果存在多個獨立的應用,可以考慮把它們放到不同的子context中去。下面介紹把應用context設為/情況下如何配置,其他情況類似。將jk的配置放在一個獨立的文件里,然后在httpd。conf中Include該文件即可。
    第一步,讓apache加載mod_jk:
    [code:1:820f207fd7]#mod jk for tomcat-apache integration
    LoadModule jk_module modules/mod_jk.so[/code:1:820f207fd7]
    把應用context映射到存放該應用靜態資源的目錄:
    [code:1:820f207fd7]# Static files in the examples webapp are served by apache
    Alias / /www/tomcat4。1/webapps/ROOT/ [/code:1:820f207fd7]
    同時,因為現在靜態資源不是由tomcat處理了,所以出于安全考慮和遵守JSP/Servlet規范需要禁止對WEB-INF子目錄的訪問:
    [code:1:820f207fd7]# The following line prohibits users from directly access WEB-INF
    <Location "ROOT/WEB-INF/"> 
      AllowOverride None 
      deny from all 
    </Location>[/code:1:820f207fd7]
    在集成的調試階段可以考慮允許目錄列表功能:
    [code:1:820f207fd7]<Directory "/www/tomcat4。1/webapps/ROOT">
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    </Directory>[/code:1:820f207fd7]
    接下來一步告訴apache哪些動態內容應該讓tomcat處理,為了確定動態內容URL的特征,應該把web.xml中的所有servlet mapping中出現的URL模式在jk.conf中聲明:
    [code:1:820f207fd7]JkMount /BaseServlet worker1 
    JkMount /Servlet/* worker1 
    JkMount /ProductUploadServlet worker1 
    JkMount /upload worker1 
    JkMount /test worker1 
    JkMount /*.jsp worker1 
    JkMount /*.do worker1[/code:1:820f207fd7]
    其它可能需要修改的配置
    配置項 說明
    JkWorkersFile 指定jk workers.properties的位置,如果是相對路徑,則假定在apache的ServerRoot目錄下
    JkLogFile 指定jk log文件的位置,如果是相對路徑,則假定在apache的ServerRoot目錄下
    JkLogLevel 指定jk log的級別有效的選項有:debug/error/info
    JkLogStampFormat 指定log中的時間格式,使用c函數strftime()的格式字符串語法

    [b:820f207fd7]總結[/b:820f207fd7]Tomcat和Apache集成時通常需要一下步驟:
    1. 決定使用哪種connector
    2. 獲得connector,如果沒有現成的二進制的connector,則需要手工編譯,根據操作系統的不同可能還要設置編譯環境。
    3. 配置tomcat
    4. 配置apache,確定context,將context對應到應用的頂層目錄。根據web.xml中的servlet映射把所有的動態內容的url模式配置在apache中
    5. 測試
    [b:820f207fd7]附錄[/b:820f207fd7]
    一個完整的配置例子:
    [code:1:820f207fd7]#mod jk for tomcat-apache integration
    LoadModule jk_module modules/mod_jk.so

    JkWorkersFile conf/workers.properties
    # Where to put jk logs

    JkLogFile logs/mod_jk。log
    # Set the jk log level [debug/error/info]
    JkLogLevel debug

    # Select the log format
    JkLogStampFormat "[%Y-%m-%d %H:%M:%S] "

    # JkOptions indicate to send SSL KEY SIZE,
    JkOptions +ForwardKeySize +ForwardURICompat +ForwardURICompatUnparsed -ForwardDirectories

    # JkRequestLogFormat set the request format
    JkRequestLogFormat "%w %V %T"

    # Static files in the examples webapp are served by apache
    Alias / /www/tomcat4。1/webapps/ROOT/ 
    # The following line prohibits users from directly access WEB-INF
    <Location "ROOT/WEB-INF/"> 
    AllowOverride None 
    deny from all 
    </Location> 

    <Directory "/www/tomcat4.1/webapps/ROOT">
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    </Directory>

    #JkAutoAlias /www/tomcat4.1/webapps/ROOT
    JkMount /BaseServlet worker1 
    JkMount /Servlet/* worker1 
    JkMount /ProductUploadServlet worker1 
    JkMount /upload worker1 
    JkMount /test worker1 
    JkMount /*.jsp worker1 
    JkMount /*.do worker1[/code:1:820f207fd7]

    此外,jk還需要一個workers.properties文件配置jk本身的參數.如過不需要培植負載平衡
    可以使用以下配置
    [code:1:820f207fd7]# Define 1 real worker using ajp13
    worker.list=worker1
    # Set properties for worker1 (ajp13)
    worker.worker1.type=ajp13
    worker.worker1.host=127.0.0.1
    worker.worker1.port=8009
    worker.worker1.lbfactor=50
    worker.worker1.cachesize=10
    worker.worker1.cache_timeout=600
    worker.worker1.socket_keepalive=1
    worker.worker1.socket_timeout=300[/code:1:820f207fd7]要注意的是JkMount所引用的worker的名稱必須是在work.list定義過的。

     HonestQiao 回復于:2004-05-31 13:02:07
    如果是原創,請在標題說明一下子

     schnell18 回復于:2004-05-31 15:33:58
    是原創了,馬上改

     wxijin 回復于:2004-05-31 18:26:39
    JK已經逐步要被JK2給代替,而且APACHE不再對JK提供更新及相應的技術支持。

     schnell18 回復于:2004-05-31 20:35:24
    說是這么說。但如果你動手編譯過jk2(特別是處了Linux以外的操作系統)的話,你就會知道jk2并沒有傳說的中的好。所謂“停止support”太無聊了,OSS的東西本來就沒有什么支持。全靠大家用得多了,才是有所謂的支持啊。

     jhsea3do 回復于:2004-05-31 20:49:50
    如果單用tc+apache的話, 我自己感覺 jk 要比 jk2好

    但是商業運用的話,還是很在乎support的,比如漏洞之類的東西.

    而且jk2的好處在于他可以用在iis等非apache的web服務器上
    甚至我的blog是跑在jetty上的,而不是tomcat,他也可以通過jk2和apache聯立,jk2這方面要比jk好.

     schnell18 回復于:2004-06-01 15:54:01
    TO:jhsea3do
    你沒有沒用jk2在除了linux和windows以外的操作系統和最新版本的apache集成的經驗? 我試過不太成功,配置的語法不太直觀,所以覺得用jk比較方便。

     peng 回復于:2004-06-01 16:22:36
    我用的多是solaris,最近常做jdk2+apche+resin。

    感覺jdk2還可以,尤其是一些新的功能,jk還是不能滿足的。

    至于麻煩,solaris下編譯free的東西,就沒有方便的。。

     luvlm 回復于:2004-06-01 19:48:50
    為何要集成呢?  兩個都可單獨運行。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>