小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用mod

 muyable 2015-01-08
[img][/img]這類文章在網(wǎng)上太多了,但我看到的都是亂糟糟的,要么沒重點,要么只講配置不講道理。干脆我自己寫一個 

1.概述
這種設(shè)計可以稱作“反向代理”,即把web server當作app server的代理.
Apache的模塊mod_proxy就是為此而生的
Proxy就是我們要配的第一個東西

proxy會導(dǎo)致一個問題。tomcat的host/port與apache的hostp/port肯定有所不同。那在tomcat中的webapp下執(zhí)行servlet.getServerName()和getServerPort()時,拿到的主機名和端口是什么? 如果不作配置的話,就是tomcat自己的host/port;這顯然不是我們想要的。我們要的是用戶請求的host/port,即apache的host/port.  我們要配置的第二步就是來解決這個問題。

最后一個問題跟session stickiness相關(guān). 由于我們有兩個tomcat,怎么讓同一個session下的所有請求都發(fā)到同一個tomcat上呢? Apache通過mod_proxy_balancer解決這個問題。這是我們要配的第三個東西。



下面就一個一個來配:

2.配置proxy

#apache的httpd-vhosts.conf
<VirtualHost *:80>
    ...
    #先只配一個tomcat
    ProxyPass /tomcat/ http://tomcat:8080/
    ProxyPassReverse /tomcat/ http://tomcat:8080/
    #上面兩句話會把 http://apache/tomcat下的所有請求轉(zhuǎn)發(fā)給 http://tomcat:8080
    ...    
</VirtualHost>

3.解決proxy引發(fā)的request.getServerName()問題
<!--Tomcat的server.xml-->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               proxyName="apache"
               proxyPort="80"
             
               />
<!--這樣一來,拿到的getServerName()和getServerPort()就是用戶真正請求的東西-->


4.1 - 把兩個tomcat做成一個集群

<VirtualHost *:80>
    ...
    #兩個tomcat并作一個集群
    <Proxy balancer://tomcat-cluster>
        BalancerMember http://tomcat:3535
        BalancerMember http://tomcat:3636
    </Proxy>

    #把proxy指向這個集群
    ProxyPass /toomcat/ balancer://tomcat-cluster/
    ProxyPassReverse /tomcat/ balancer://tomcat-cluster/   
    ...
</VirtualHost>

4.2 - 最后處理一下session stickiness問題
這個問題是通過cookie來解決的。系統(tǒng)創(chuàng)建session時會發(fā)一個cookie給客戶端,cookie中會指明當前應(yīng)答的tomcat是哪個; 用戶提交第二個請求時會回送這個cookie,系統(tǒng)再根據(jù)這個cookie的值找到上次應(yīng)答的tomcat,然后把請求轉(zhuǎn)交給它。(注:不用cookie,在URL后面后跟;jsessionid也可以)

所以這邊有兩個子問題:
  1.這個cookie叫什么名字?
  2.怎么樣區(qū)別此tomcat與彼tomcat?


4.2.1 - cookie名

Servlet下cookie的名字一般叫JSESSIONID(也可以叫其它的,雖然不太合規(guī)),我們要把這個名字配到Apache中去:

<VirtualHost *:80>
    ...
   
    <Proxy balancer://tomcat-cluster>
        BalancerMember http://tomcat:3535
        BalancerMember http://tomcat:3636
        ProxySet stickysession=JSESSIONID|jsessionid
    </Proxy>
 
    ProxyPass /toomcat/ balancer://tomcat-cluster/
    ProxyPassReverse /tomcat/ balancer://tomcat-cluster/
    ...
</VirtualHost>   

4.2.2 - 區(qū)別兩個tomcat
這里有個"route"的概念。別管route具體什么意思,總之:兩個tomcat各有一個route-id
<!--Tomcat1的server.xml-->
<Engine name="Catalina" defaultHost="localhost"  jvmRoute="route1">
  ...
<!--Tomcat2的server.xml-->
  <Engine name="Catalina" defaultHost="localhost"  jvmRoute="route2">
...

再把這兩個route-id注冊到apache中

#這是apache配置的最終版本
<VirtualHost *:80>
    ...
   
    <Proxy balancer://tomcat-cluster[>
        BalancerMember http://tomcat:3535 route=route1
        BalancerMember http://tomcat:3636 route=route2
ProxySet stickysession=JSESSIONID|jsessionid
    </Proxy>
 
    ProxyPass /toomcat/ balancer://tomcat-cluster/
    ProxyPassReverse /tomcat/ balancer://tomcat-cluster/
    ...
</VirtualHost>   

最后用戶收到的cookie就是這種風(fēng)格: JSESSIONID=ERFGHJKJHGRTYH4567.route1, JSESSIONID=TGDFTYDJHGRTYH4567.route2


==================================================
大功告成!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多