Zope 虛擬主機的實例教學
建立日期 2006-08-17 08:00 最近更新在 2007-02-15 00:40
作者是 pwchi
◎ 目的與原理
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 模組來完成。
- 首先,使用者發出 HTTP 請求 https://www.pwchi.info/zope 給 Apache。
- 請求會經過 Apache 的 Rewrite 模組重新組合。
- Rewrite 參照設定好的規則,將請求導向 https://www.pwchi.info:8080/ 。
- 接著 Zope 對請求做出回應。
對使用者而言,他並不會感受到轉送過程的存在,使用者的 Browser 網址列仍舊是 https://www.pwchi.info/zope 。
◎ 實作方法
Apache 提供三種方式達成這樣的功能:
- mod_rewrite method
- mod_proxy Method
- 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: -
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: -
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: -
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 網站專案的相關測試與維護工作。接下來在開放鑄造場電子報的技術專欄中,會陸續跟大家分享這幾個領域的研究心得或實作講解。