<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    整合 Apache Http Server 和 Tomcat 可以提升對靜態文件的處理性能、利用 Web 服務器來做負載均衡以及容錯、無縫的升級應用程序。本文介紹了三種整合 Apache 和 Tomcat 的方式。

    首先我們先介紹一下為什么要讓 Apache 與 Tomcat 之間進行連接。事實上 Tomcat 本身已經提供了 HTTP 服務,該服務默認的端口是 8080,裝好 tomcat 后通過 8080 端口可以直接使用 Tomcat 所運行的應用程序,你也可以將該端口改為 80。

    既然 Tomcat 本身已經可以提供這樣的服務,我們為什么還要引入 Apache 或者其他的一些專門的 HTTP 服務器呢?原因有下面幾個:

    1. 提升對靜態文件的處理性能

    2. 利用 Web 服務器來做負載均衡以及容錯

    3. 無縫的升級應用程序

    這 三點對一個 web 網站來說是非常之重要的,我們希望我們的網站不僅是速度快,而且要穩定,不能因為某個 Tomcat 宕機或者是升級程序導致用戶訪問不了,而能完成這幾個功能的、最好的 HTTP 服務器也就只有 apache 的 http server 了,它跟 tomcat 的結合是最緊密和可靠的。

    接下來我們介紹三種方法將 apache 和 tomcat 整合在一起。

    JK

    這是最常見的方式,你可以在網上找到很多關于配置JK的網頁,當然最全的還是其官方所提供的文檔。JK 本身有兩個版本分別是 1 和 2,目前 1 最新的版本是 1.2.19,而版本 2 早已經廢棄了,以后不再有新版本的推出了,所以建議你采用版本 1。

    JK 是通過 AJP 協議與 Tomcat 服務器進行通訊的,Tomcat 默認的 AJP Connector 的端口是 8009。JK 本身提供了一個監控以及管理的頁面 jkstatus,通過 jkstatus 可以監控 JK 目前的工作狀態以及對到 tomcat 的連接進行設置,如下圖所示:


    圖 1:監控以及管理的頁面 jkstatus
    圖 1:監控以及管理的頁面 jkstatus

    在 這個圖中我們可以看到當前JK配了兩個連接分別到 8109 和 8209 端口上,目前 s2 這個連接是停止狀態,而 s1 這個連接自上次重啟后已經處理了 47 萬多個請求,流量達到 6.2 個 G,最大的并發數有 13 等等。我們也可以利用 jkstatus 的管理功能來切換 JK 到不同的 Tomcat 上,例如將 s2 啟用,并停用 s1,這個在更新應用程序的時候非常有用,而且整個切換過程對用戶來說是透明的,也就達到了無縫升級的目的。關于 JK 的配置文章網上已經非常多了,這里我們不再詳細的介紹整個配置過程,但我要講一下配置的思路,只要明白了配置的思路,JK 就是一個非常靈活的組件。

    JK 的配置最關鍵的有三個文件,分別是

    httpd.conf
    Apache 服務器的配置文件,用來加載 JK 模塊以及指定 JK 配置文件信息

    workers.properties
    到 Tomcat 服務器的連接定義文件

    uriworkermap.properties
    URI 映射文件,用來指定哪些 URL 由 Tomcat 處理,你也可以直接在 httpd.conf 中配置這些 URI,但是獨立這些配置的好處是 JK 模塊會定期更新該文件的內容,使得我們修改配置的時候無需重新啟動 Apache 服務器。

    其中第二、三個配置文件名都可以自定義。下面是一個典型的 httpd.conf 對 JK 的配置


    # (httpd.conf)
    # 加載 mod_jk 模塊
    LoadModule jk_module modules/mod_jk.so

    #
    # Configure mod_jk
    #

    JkWorkersFile conf/workers.properties
    JkMountFile conf/uriworkermap.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel warn

    接下來我們在 Apache 的 conf 目錄下新建兩個文件分別是 workers.properties、uriworkermap.properties。這兩個文件的內容大概如下


    #
    # workers.properties
    #


    # list the workers by name

    worker.list=DLOG4J, status

    # localhost server 1
    # ------------------------
    worker.s1.port=8109
    worker.s1.host=localhost
    worker.s1.type=ajp13

    # localhost server 2
    # ------------------------
    worker.s2.port=8209
    worker.s2.host=localhost
    worker.s2.type=ajp13
    worker.s2.stopped=1

    worker.DLOG4J.type=lb
    worker.retries=3
    worker.DLOG4J.balanced_workers=s1, s2
    worker.DLOG4J.sticky_session=1

    worker.status.type=status

    以上的 workers.properties 配置就是我們前面那個屏幕抓圖的頁面所用的配置。首先我們配置了兩個類型為 ajp13 的 worker 分別是 s1 和 s2,它們指向同一臺服務器上運行在兩個不同端口 8109 和 8209 的 Tomcat 上。接下來我們配置了一個類型為 lb(也就是負載均衡的意思)的 worker,它的名字是 DLOG4J,這是一個邏輯的 worker,它用來管理前面配置的兩個物理連接 s1 和 s2。最后還配置了一個類型為 status 的 worker,這是用來監控 JK 本身的模塊。有了這三個 worker 還不夠,我們還需要告訴 JK,哪些 worker 是可用的,所以就有 worker.list = DLOG4J, status 這行配置。

    接下來便是 URI 的映射配置了,我們需要指定哪些鏈接是由 Tomcat 處理的,哪些是由 Apache 直接處理的,看看下面這個文件你就能明白其中配置的意義


    /*=DLOG4J
    /jkstatus=status

    !/*.gif=DLOG4J
    !/*.jpg=DLOG4J
    !/*.png=DLOG4J
    !/*.css=DLOG4J
    !/*.js=DLOG4J
    !/*.htm=DLOG4J
    !/*.html=DLOG4J

    相信你已經明白了一大半了:所有的請求都由 DLOG4J 這個 worker 進行處理,但是有幾個例外,/jkstatus 請求由 status 這個 worker 處理。另外這個配置中每一行數據前面的感嘆號是什么意思呢?感嘆號表示接下來的 URI 不要由 JK 進行處理,也就是 Apache 直接處理所有的圖片、css 文件、js 文件以及靜態 html 文本文件。

    通過對 workers.properties 和 uriworkermap.properties 的配置,可以有各種各樣的組合來滿足我們前面提出對一個 web 網站的要求。您不妨動手試試!





    回頁首


    http_proxy

    這是利用 Apache 自帶的 mod_proxy 模塊使用代理技術來連接 Tomcat。在配置之前請確保是否使用的是 2.2.x 版本的 Apache 服務器。因為 2.2.x 版本對這個模塊進行了重寫,大大的增強了其功能和穩定性。

    http_proxy 模式是基于 HTTP 協議的代理,因此它要求 Tomcat 必須提供 HTTP 服務,也就是說必須啟用 Tomcat 的 HTTP Connector。一個最簡單的配置如下


    ProxyPass /images !
    ProxyPass /css !
    ProxyPass /js !
    ProxyPass / http://localhost:8080/

    在這個配置中,我們把所有 http://localhost 的請求代理到 http://localhost:8080/ ,這也就是 Tomcat 的訪問地址,除了 images、css、js 幾個目錄除外。我們同樣可以利用 mod_proxy 來做負載均衡,再看看下面這個配置


    ProxyPass /images !
    ProxyPass /css !
    ProxyPass /js !

    ProxyPass / balancer://example/
    <Proxy balancer://example/>
    BalancerMember http://server1:8080/
    BalancerMember http://server2:8080/
    BalancerMember http://server3:8080/
    </Proxy>

    配置比 JK 簡單多了,而且它也可以通過一個頁面來監控集群運行的狀態,并做一些簡單的維護設置。


    圖 2:監控集群運行狀態
    圖 2:監控集群運行狀態




    回頁首


    ajp_proxy

    ajp_proxy 連接方式其實跟 http_proxy 方式一樣,都是由 mod_proxy 所提供的功能。配置也是一樣,只需要把 http:// 換成 ajp:// ,同時連接的是 Tomcat 的 AJP Connector 所在的端口。上面例子的配置可以改為:


    ProxyPass /images !
    ProxyPass /css !
    ProxyPass /js !

    ProxyPass / balancer://example/
    <Proxy balancer://example/>
    BalancerMember ajp://server1:8080/
    BalancerMember ajp://server2:8080/
    BalancerMember ajp://server3:8080/
    </Proxy>

    采用 proxy 的連接方式,需要在 Apache 上加載所需的模塊,mod_proxy 相關的模塊有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、 mod_proxy_ajp.so, 其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式則需要加載 mod_proxy.so 和 mod_proxy_http.so;如果是 ajp_proxy 則需要加載 mod_proxy.so 和 mod_proxy_ajp.so這兩個模塊。





    回頁首


    三者比較

    相 對于 JK 的連接方式,后兩種在配置上是比較簡單的,靈活性方面也一點都不遜色。但就穩定性而言就不像 JK 這樣久經考驗,畢竟 Apache 2.2.3 推出的時間并不長,采用這種連接方式的網站還不多,因此,如果是應用于關鍵的互聯網網站,還是建議采用 JK 的連接方式。



    參考資料



    關于作者


    劉冬,一直使用 J2EE/J2ME 從事移動互聯網方面的開發。您可以通過 Java 自由人網站來跟他聯系,網址是:http://www.dlog.cn/javayou ,另外他的郵件地址是javayou@gmail.com。

    posted on 2008-07-16 22:41 seal 閱讀(210) 評論(0)  編輯  收藏 所屬分類: web服務器
    主站蜘蛛池模板: 亚洲日韩国产成网在线观看| 永久免费无码网站在线观看| 亚洲人成网站日本片| 亚洲av无码天堂一区二区三区| 五月亭亭免费高清在线| xxxxx做受大片在线观看免费| 91午夜精品亚洲一区二区三区| 亚洲精品无码成人片久久| 四虎影在线永久免费四虎地址8848aa| 国产一区二区免费| 无码人妻精品中文字幕免费| 国产精品hd免费观看| 免费的黄色网页在线免费观看| 亚洲综合色丁香婷婷六月图片| 亚洲国产超清无码专区| 亚洲另类古典武侠| 亚洲第一永久在线观看| 亚洲自偷精品视频自拍| 亚洲高清不卡视频| 亚洲熟妇AV乱码在线观看| 亚洲videos| 偷自拍亚洲视频在线观看99| 日日狠狠久久偷偷色综合免费 | 亚洲一区免费在线观看| 免费国产黄线在线观看| 国产大片91精品免费观看男同 | 国产日韩在线视频免费播放| 国产男女爽爽爽免费视频| 久久免费精彩视频| 永久免费av无码网站韩国毛片| 国产成人免费网站在线观看| 亚洲精品97久久中文字幕无码| 国产亚洲成av片在线观看| ww亚洲ww在线观看国产| 色屁屁www影院免费观看视频| 国产免费播放一区二区| 亚洲毛片在线免费观看| 亚洲毛片不卡av在线播放一区| 亚洲高清中文字幕综合网| 一区二区三区免费看| 在线视频观看免费视频18|