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

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

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

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    Apusic如何配置虛擬主機

    其實配置虛擬主機的文章很多,Apusic應用服務器管理文檔中已有專門的描述,我這里寫的最重要是虛擬主機有啥用,是否還有其他解決方案。
    這篇文章是從最近的工作中得來的,最初需求是要配置虛擬主機,結果采用的是寫了一段代碼進行代替。兩種方法不分高低,可能對于喜歡規范的朋友會鄙視我的變通方式,覺得俺的東西不遵守規范,給未來又留下多少隱患之類,但是我認為寫代碼對國內項目來說,由于都是程序員現場實施,因此未來的變化更加好控制。最后,我還會提供一種更為復雜,但是更為先進的虛擬機方式就是Apache+Apusic整合的方式,這樣結果會更靈活,當然維護成本也就更高。
    先介紹為什么要配虛擬主機,給客戶到底帶來什么價值呢?
    一般是主機提供商喜歡用虛擬主機,他們將一個服務器資源分配給許多客戶使用,每個客戶有自己的域名,有權訪問自己虛擬主機部署的應用。而現在政府客戶為了突出部門的獨立性也喜歡申請單獨的域名,通過不同的域名訪問部門自己的門戶系統,但是這些應用部署在統一對外的服務器上,甚至由一個J2EE應用提供不同的門戶。
    那么虛擬主機又是如何運作的呢?
    虛擬主機首先是域名的不同,域名由DNS服務器解析成IP地址。如果那些應用都部署在統一對外的服務器上,那么不同的域名將會解析成相同的IP地址返回給瀏覽器。瀏覽器依據這個IP地址訪問應用服務器,并且會把訪問用的URL帶在HTTP頭中。如果訪問的應用都使用相同的路徑(<context-root>/</context-root>),這些應用就會在部署時發生沖突。為了解決這樣的沖突,應用服務器中間件就提供了虛擬主機的方式,等于在一個應用服務器中間件上可以虛擬出好幾個計算機,當然部署相同上下文名稱的應用也就不會再有問題。應用服務器通過判斷HTTP頭中的URL來決定采用哪個虛擬主機中的應用提供服務。
    Apusic如何配置虛擬主要呢?
    修改config/server.xml文件增加virtual-host參數就可以實現。這個實驗在本機也可以測試,測試過程如下:
    1. 修改Windows/system32/drivers/etc/hosts. 文件,模仿localhost增加
    ?127.0.0.1?localhost1
    ?127.0.0.1?localhost2
    2. 與applications目錄平級建立一個webapp目錄(名稱隨意,主要是避免放在applications目錄下,應用被自動發布),復制applications目錄下的default目錄到webapp目錄中,并將目錄改成default1和default2
    3. 修改server.xml文件,模仿default增加
    ? <application name="default1" base="webapp/default1" virtual-host="localhost1" start="auto"/>
    ? <application name="default2" base="webapp/default2" virtual-host="localhost2" start="auto"/>
    4. 啟動apusic應用服務器,你會發現有相同上下文Context Root的應用被啟動。
    5. 修改每個應用的index.jsp文件,增加區分標識,然后通過不同的URL(http://localhost:6888http://localhost1:6888)訪問,會得到不同應用的顯示頁面。
    現在大家已經成功完成虛擬主機的配置,但是使用虛擬主機存在什么問題呢?
    1. 如果這些應用是相互獨立的,那么他們之間的會話(Session)數據是無法共享的,應用相關的頁面和風格無法共享,用戶需要維護多個應用增加了維護成本;
    2. 如果這些頁面統一跳轉到一個應用的不同目錄下,那么瀏覽器的URL就會變成部署應用的虛擬主機域名,但是這個可能不是用戶所希望的。
    新的用戶需求,因為用戶其實只采購了一個應用,但是希望不同的域名有不同的門戶主頁,于是我的解決方案是應用只有一個,在應用里面建立default1和default2目錄,那么用戶訪問服務器時,系統會根據URL的不同進行跳轉,判斷URL的代碼如下:
    <html>
    <head>
    </head>
    <body>
    <script type="text/javascript">
    var aHost=window.location.hostname; //取得訪問應用服務器使用的域名
    if (aHost=="localhost1")
    ?window.location.href="http://localhost:6888/default1";
    else if (aHost=="localhost2")
    ?window.location.href="http://localhost:6888/default2";
    else alert("nothing happen!");
    </script>
    </body>
    </html>
    這種訪問,無論如何跳轉域名都不會發生改變,而且跳轉到其他門戶時會話數據可以共享,簡化了SSO(單點登錄)的開發難度。但是,這種方式也有缺陷就是訪問時上下文必須不同,而且無法讓所有的域名使用相同的上下文,特別是都使用根目錄。因此,采用哪種方式看用戶的需要。
    但是,維護者可能還是覺得復雜,因為要動底層代碼,是否還有完全配置的解決方案嗎?
    有!那就是用Apache+Apusic配置虛擬主機,整個操作過程如下:
    1. 先在Apusic的默認default應用中增加兩個目錄default1和default2,修改index.jsp文件方便顯示后區分;
    2. 修改Apache的配置文件httpd.conf,增加虛擬主機的配置,通過Apache的虛擬主機+代理跳轉的方式,提供對虛擬主機的支持,增加部分如下:
    #以下增加的模塊部分無用,只是我沒時間查證,所以都打開了。
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

    NameVirtualHost *:8080

    <VirtualHost *:8080>
    ?ProxyPreserveHost On
    ?ServerAdmin zhuyuanxiang@apusic.com
    ?ServerName localhost
    ?ProxyPass / http://localhost:6888/
    ?ProxyPassreverse? / http://localhost:6888/
    </VirtualHost>

    <VirtualHost *:8080>
    ?ProxyPreserveHost On
    ?ServerAdmin zhuyuanxiang@apusic.com
    ?ServerName localhost1
    ?ProxyPass / http://localhost:6888/default1/
    ?ProxyPassreverse? / http://localhost:6888/default1/
    </VirtualHost>

    <VirtualHost *:8080>
    ?ProxyPreserveHost On
    ?ServerAdmin zhuyuanxiang@apusic.com
    ?ServerName localhost2
    ?ProxyPass / http://localhost:6888/default2/
    ?ProxyPassreverse? / http://localhost:6888/default2/
    </VirtualHost>
    3. 啟動apusic應用服務器,通過http://localhost:8080http://localhost1:8080http://localhost2:8080就可以得到不同的展示頁面。
    (后兩個頁面顯示不正確,因為它們的圖片路徑不正確,在后臺他們其實使用的不是前臺顯示的路徑,因此服務器無法找到圖片)
    這個就使不同虛擬主機都以根路徑的方式顯示不同的門戶,同時在后臺應用服務器上可以共享應用,但是同時也帶來了潛在的維護成本和系統風險。
    那么到底采用什么樣的方式配置虛擬主機呢?
    其實這個需要實際場景來決定,以下幾個條件可以參考:
    1. 是否需要共享應用?
    2. 是否需要都使用根路徑?
    3. 是否需要通過Apache來提供負載均衡?
    根本目標是開發和維護簡單化,夠用就是最好的,做技術的朋友最怕追求技術先進性。
    參考文獻:
    1. mod_proxy - Apache 2.2 中文版參考手冊,
    http://doc.chinahtml.com/Manual/ApacheManual/mod/mod_proxy.html
    2. 基于反相代理的Web緩存加速
    http://www.chedong.com/tech/cache.html

    posted on 2008-02-28 23:08 zYx.Tom 閱讀(1641) 評論(4)  編輯  收藏

    評論

    # re: Apusic如何配置虛擬主機 2008-03-02 14:45 xifu

    這個東東有jboss好用嗎  回復  更多評論   

    # re: Apusic如何配置虛擬主機 2008-03-02 15:49 朱遠翔-Apusic技術顧問

    @xifu
    你是說金蝶Apusic嗎?肯定比JBoss好用(我的感受),設計簡潔,Web容器與EJB容器本身就在一起,有中文文檔和國內支持,有支持J2EE開發的獨立解決方案,并且都有相對應的產品。  回復  更多評論   

    # re: Apusic如何配置虛擬主機 2008-06-13 08:43 Bruce Luo

    如果更改了APUSIC的端口號,一寫記的在virtual-host后面加上端口號<application name="default1" base="webapp/default1" virtual-host="localhost1" start="auto"/>  回復  更多評論   

    # re: Apusic如何配置虛擬主機 2008-06-13 08:43 Bruce Luo

    更改成這樣的
    <application name="default1" base="webapp/default1" virtual-host="localhost1:端口號" start="auto"/>  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品视频全国免费观看| 99在线精品视频观看免费| 日韩视频免费在线| 四虎影永久在线高清免费| 久久久精品国产亚洲成人满18免费网站 | 亚洲男人天堂av| 久久伊人亚洲AV无码网站| 久久无码av亚洲精品色午夜| 中文永久免费观看网站| 亚洲欧洲无码AV电影在线观看| 国产免费高清69式视频在线观看| 久99精品视频在线观看婷亚洲片国产一区一级在线| 香蕉视频亚洲一级| 91免费人成网站在线观看18| 亚洲精彩视频在线观看| 青春禁区视频在线观看直播免费| 亚洲午夜无码片在线观看影院猛| 国产福利免费视频 | 一个人看的hd免费视频| 亚洲综合伊人久久大杳蕉| 亚洲精华国产精华精华液| 国产免费69成人精品视频| 中文字幕无线码中文字幕免费| 亚洲午夜久久久精品影院| 国产成人免费爽爽爽视频| 黄网站色成年片大免费高清| 亚洲一区二区三区偷拍女厕| 99久久免费精品视频| 亚洲码国产精品高潮在线| 免费无码成人AV在线播放不卡| 中文有码亚洲制服av片| 国产曰批免费视频播放免费s| 亚洲国产aⅴ成人精品无吗| 亚洲色精品aⅴ一区区三区 | 日本免费人成黄页在线观看视频| 男女猛烈激情xx00免费视频| 四虎在线免费播放| 亚洲一区二区免费视频| 国产成人精品免费视| 国产精品亚洲va在线观看| 97人伦色伦成人免费视频 |