登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
技術專欄 Zope 虛擬主機的實例教學

Zope 虛擬主機的實例教學

◎ 目的與原理

Zope 預設都是執行在 port:8080 ,因此在瀏覽 Zope 網站時,都必須指定如 https://www.pwchi.info:8080/ 這樣的網址。

如果想在原有的 Apache Web Server 基礎上,能夠不需另外指定 port,就能讓使用者直接透過 https://www.pwchi.info/zope 瀏覽 Zope 網站,而不是用原本 https://www.pwchi.info:8080/ 這樣的怪異網址。那麼就需要使用 Zope 的 Virtual Host Monster 物件,搭配 Apache 的 Rewrite 和 Proxy 模組來完成。

在這個例子當中,概要的運作過程如下圖。

 

 

  1. 首先,使用者發出 HTTP 請求 https://www.pwchi.info/zope 給 Apache。
  2. 請求會經過 Apache 的 Rewrite 模組重新組合。
  3. Rewrite 參照設定好的規則,將請求導向 https://www.pwchi.info:8080/ 。
  4. 接著 Zope 對請求做出回應。
對使用者而言,他並不會感受到轉送過程的存在,使用者的 Browser 網址列仍舊是 https://www.pwchi.info/zope 。

◎ 實作方法

Apache 提供三種方式達成這樣的功能:

  1. mod_rewrite method
  2. mod_proxy Method
  3. Fast CGI / Persistent CGI Method
其中 FCGI/PCGI 的方式,會嚴重影響執行效能,因此已經很少使用且不建議。這裡將以前面提到的例子,介紹 mod_rewirte 與 mod_proxy 兩種使用方式。

由於接下來的示範均為 Apache 的設定語法,因此必須有修改 Apache 設定檔的權限,並且在設定完成之後,重新啟動 Apache 使設定生效。

開始之前,請先確定已經安裝了 Zope 與 Apache 2 ,並載入 mod_rewrite、mod_proxy 和 mod_proxy_http 模組。

◎ Zope VHM

要讓 Apache 導引到新的 URL ,我們當然要先知道新的 URL 到底是什麼。下列是新的 URL 模樣。一時之間可能無法理解,接下來本文將分段說明。

 

CODE:
  1. https://localhost:8080/VirtualHostBase/http/www.pwchi.info:80/zope/VirtualHostRoot/_vh_zope
  • https://localhost:8080
    這是 Zope 所在主機的位址,如果有防火牆控管,必須使用內部網路的主機位址,如 192.168.1.1。
  • /VirtualHostBase/http/www.pwchi.info:80/zope
    VirtualHostBase 是 Zope 的一個物件。需要注意的地方是 www.pwchi.info:80/zope ,這是使用者到時候輸入的虛擬網址。不過必須特別標明 port。
  • /VirtualHostRoot/_vh_zope
    當 用 www.pwchi.info/zope 作為 zope 的連結位址時,zope 當中所有的連結,也都必須要調整成 www.pwchi.info/zope/ 開頭的連結位址。所以必須加上 _vh_zope 作為開頭路徑,這樣 zope 就會自動為所有的網頁連結的路徑開頭加上 /zope/。
◎ Apache mod_rewrite

mod_rewrite 是一個強大的 URL 重導向模組。因為他使用正規表示式作為比對規則的方法,因此幾乎提供無限的可能性,就看你怎麼活用正規表示式。

設定內容

 

CODE:
  1. RewriteEngine On RewriteRule ^/zope(.*) https://localhost:8080/VirtualHostBase/http/www.pwchi.info:80/zope/VirtualHostRoot/_vh_zope$1 [L,P]
  • RewriteEngine 是用來啟動或關閉 Rewrite 功能,預設為 Off。
    因此必須先用 RewriteEngine On 來開啟 Rewrite 功能。
  • RewriteRule 是實際進行 URL 重導向的語法。
    語法:RewriteRule <比對規則> <要導向的網址> [旗標]。
    比對規則中的 ^/zope(.*) 是一個正規表示式,代表只要請求的 URL 中有 /zope 就算符合。當符合規則時,就會被重新導向到新的網址。
  • $1 表示將 /zope 以後的字串,接在替換後的URL後面。
  • [L,P] 則是控制旗標
    "L" 表示立即停止規則的運算,如果後面有其他的 RewriteRule 規則設定,就不會被干擾。
    "P" 表示將替換後的 URL 提出代理請求。為了不讓使用者察覺不同,如果不加 P ,瀏覽器網址列會直接被指向新網址。
◎ Apache mod_proxy

Proxy 的設定相對於 Rewrite 簡單許多。如果沒有需要很複雜的判斷規則,建議使用 Proxy 方式即可。

特別注意,除了 mod_proxy 以外,也需要一同載入給 HTTP 協動用的 mod_proxy_http 模組。

設定內容

 

CODE:
  1. ProxyPass /zope https://localhost:8080/VirtualHostBase/http/giant.twlinux.net:80/zope/VirtualHostRoot/_vh_zope
  • ProxyPass 用來將指定的位址,映射到指定位址。
    語法:ProxyPass <相對URL> <目的URL>
◎ 結論

Zope 是一個功能強大的 Application Server ,如果再配合本次介紹的 rewrite 與 proxy 模組,就可以架構出實用的 Zope 的虛擬主機解決方案了。

關於作者:
嗨,我是 Po-Wen Chi (紀博文)。一個自由軟體鬥士,我沒有萬能伙計,只有一台 NB。我在網路上的 ID 是 「pwchi」。研究興趣是Linux 作業系統、OpenSource CMS、資訊安全與數位學習,目前主要參與 Plone CMS 網站專案的相關測試與維護工作。接下來在開放鑄造場電子報的技術專欄中,會陸續跟大家分享這幾個領域的研究心得或實作講解。




自由軟體鑄造場電子報 : 第 64 期 GPL3 草案修改要點解析

分類: 技術專欄