WebObjects/Web 應用程式/部署/Apache
在 Mac OS X、Linux 或 Solaris 上的部署場景中,您的應用程式很可能部署在 Apache 上。此外,如果您使用 WODirectConnectEnabled=false 進行開發(您應該這樣做,請參閱直接連線部分了解更多資訊),您也將透過 Apache 在本地執行應用程式。Apache 是一個非常可擴充套件的 Web 伺服器,它提供大量功能,我們將在本文件中詳細介紹其中一些功能。
WebObjects 應用程式以“分離安裝”方式部署。分離安裝意味著您的應用程式程式碼、元件和資源部署在一個位置,以便從您的 WebObjects 應用程式提供服務(在 OS X 上,為 /Library/WebObjects/Applications/YourApp.woa),而您的 WebServerResources 則安裝在另一個位置(在 OS X 上,為 /Library/WebServer/Documents/WebObjects/YourApp.woa/Contents/WebServerResources),以便由 Apache 直接提供服務。這提供了最佳效能方案,因為 Apache 專為提供靜態內容而進行了最佳化,並且沒有必要將對大型二進位制檔案的請求透過 WebObjects 傳送。
為了從 Apache 獲得最佳效能,您應該確保啟用了 mod_expires。mod_expires 控制應用於靜態資源請求的快取頭。根據您的安裝情況,Apache 可能預設停用 mod_expires,這會導致您的終端使用者瀏覽器在每個頁面上重新請求您網站上的每個資源,即使是常見的標題圖形也是如此。
一個 mod_expires 配置示例如下所示
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault A60 ExpiresByType image/bmp A3600 ExpiresByType image/gif A3600 ExpiresByType image/ief A3600 ExpiresByType image/jpeg A3600 ExpiresByType image/png A3600 </IfModule>
您還需要相應的型別擴充套件對映
<IfModule mod_mime.c> AddType image/bmp bmp AddType image/gif gif AddType image/ief ief AddType image/jpeg jpeg AddType image/jpeg jpg AddType image/jpeg jpe ... </IfModule>
這告訴 Apache,當請求型別為 image/gif 時,請求瀏覽器將被告知在 1 小時內不要再次請求該影像(A3600 = 3600 秒)。
任何使用過 WebObjects 的人都可能注意到 WebObjects URL 很長(http://yoursite.com/cgi-bin/WebObjects/AppName.woa/wa/something)。常見的要求是為那些習慣於只請求“http://yoursite.com”的終端使用者使這些 URL 變得更友好。幸運的是,Apache 提供了一個非常廣泛的模組,稱為“mod_rewrite”,它允許您根據一系列正則表示式和規則重寫您網站的 URL 請求。
Aaron Rosenzweig 有一篇關於在 Apache 中使用 mod_rewrite的非常詳盡的文章。
在使用 mod_WebObjects 時,我在使用 mod_rewrite 時遇到了一個問題,即 mod_WebObjects 必須先載入,否則它無法正常工作(它將在 cgi-bin 介面卡中正常工作)。
所以在 http.conf 中,搜尋 mod_rewrite 並將其更改為
LoadModule WebObjects_module /System/Library/WebObjects/Adaptors/Apache/mod_WebObjects.so LoadModule rewrite_module libexec/httpd/mod_rewrite.so
,再次查詢
AddModule mod_WebObjects.c AddModule mod_rewrite.c
在 /System/Library/WebObjects/Adaptors/Apache/apache.conf 中仍然有一個載入模組,但您可以忽略它——它會生成一條關於載入兩次的警告。
以下是我們在一個應用程式中使用的 mod_rewrite 示例
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/$ /page/HomePage [R]
RewriteCond %{QUERY_STRING} ^appNum=([-0-9]+)(.*)$
RewriteRule ^/page/(.*)$ /cgi-bin/WebObjects/AppName.woa/%1/wa/viewPage?pageName=$1%2 [L,PT]
RewriteRule ^/page/(.*)$ /cgi-bin/WebObjects/AppName.woa/wa/viewPage?pageName=$1 [L,PT,QSA]
</IfModule>
WOA 以格式 http://site.com/page/HomePage?appNum=2 生成 URL,它將變為 http://site.com/cgi-bin/WebObjects/AppName.woa/2/viewPage?pageName=HomePage。
許多人表示有興趣將 WebObjects 介面卡與 Apache 2.2.x 一起使用。我終於有機會坐下來,今天就處理它。我寫信通知您,它可以在 Project Wonder CVS 儲存庫中獲得。
必要的更改結果證明主要是對過時/棄用函式進行的微小更新。最大的(也是非平凡的)更改是針對 SSL 支援。它已被重寫為使用 Apache 的 mod_ssl 模組。
我已經在 MacOS X 10.4.7、Apache 2.2.2 上進行了測試,有無 ssl 支援。它在我的所有測試中都按預期工作。
由於 Apache 2.2.x httpd.conf 檔案中新的、非常嚴格的預設訪問規則,配置 Web 伺服器以與介面卡一起工作結果證明具有挑戰性。一旦我發現了這一點,更改設定就變得微不足道,但值得在這裡提一下,以避免人們感到沮喪。
新的預設配置是
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
您可以選擇註釋掉該程式碼塊的最後兩行,或者在 VirtualHost 塊中覆蓋它們。僅僅設定通常的 Location 塊對我來說似乎行不通。
當然,您也可以將 WebObjectsAlias 設定的名稱從 /cgi-bin/WebObjects 更改為 <foo>/WebObjects,或者註釋掉 /cgi-bin/ 目錄的 ScriptAlias 定義。
除了這些提示之外,它基本上是標準的編譯、安裝和配置。*
- 更改 Wonder 儲存庫的 Adaptors 目錄中的 make.config 檔案以反映您的 apache 安裝設定。
- 執行 make 以構建介面卡
- 因為你忘記了一個設定而詛咒。修復它。
- make clean; make
- 使用 apxs 安裝 mod_WebObjects 模組
- 配置您的 httpd.conf,並將 WebObjects 目錄從標準位置(如果在 MacOS X 上)連結或複製到您的新 htdocs 目錄。
- apachectl configtest; apachectl graceful
- 測試。
- 再次詛咒。根據需要更改 httpd.conf 檔案。
- apachectl graceful。根據需要轉到第 8 步。
- 最後!apachectl graceful
享受您全新的 WO 介面卡。:)
- 注意:如果您遇到以下錯誤
libtool: compile: unable to infer tagged configuration libtool: compile: specify a tag with `--tag' apxs:Error: Command failed with rc=65536
在 make.config 的末尾新增以下內容:CC = gcc