FastCGI 外掛程式隨附於 Web Server 7.0。您可以透過下列一種方式在 Web 伺服器上配置 FastCGI 外掛程式:
外掛程式安裝於下列位置:
32 位元的 FastCGI 外掛程式二進位檔安裝在 <install_dir>/plugins/fastcgi 目錄下。 |
64 位元的 Solaris SPARC FastCGI 外掛程式二進位檔安裝在 <install_dir>/lib/plugins/fastcgi/64 目錄下。 |
將安裝下列 FastCGI 二進位檔:
libfastcgi.so (適用於 Solaris/Linux) |
fastcgi.dll(適用於 Windows) |
Fastcgistub.exe(適用於 Windows) |
libfastcgi.sl(適用於 HP-UX) |
Fastcgistub(可執行檔) |
配置 FastCGI 外掛程式時,需使用位於 <instance-dir>/config 目錄下的 Web 伺服器配置檔案。若要配置 FastCGI 外掛程式,請執行下列步驟:
使用「load-modules」Init 函數載入 FastCGI 外掛程式共用程式庫。
Init fn=flex-init access="access" format.access="%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] \"%Req->reqpb.clf-request%\" %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length%" Init fn="load-modules" shlib="libJava EEplugin.so" shlib_flags="(global|now)" Init fn="load-modules" shlib="libfastcgi.so" shlib_flags="(global|now)"
編輯 mime.types 檔案以指定 MIME 對映。修改 MIME 類型對映是可選步驟。
例如,
#--Sun Microsystems Inc. MIME Information # Do not delete the above line. It is used to identify the file type. # # Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # type=application/octet-stream exts=bin type=application/astound exts=asd,asn ... ... type=magnus-internal/fastcgi exts=php ... ...
編輯 obj.conf 檔案,以使用之前各節所述的外掛程式 SAF,來配置 FastCGI 特有的請求。
修改後的 obj.conf 檔案範例如下所示:
# # Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # You can edit this file, but comments and formatting changes # might be lost when you use the administration GUI or CLI. <object name = "default"> AuthTrans fn="match-browser" browser="*MSIE*" ssl-unclean-shutdown="true" NameTrans fn="ntrans-Java EE" name="Java EE" NameTrans fn="pfx2dir" from="/mc-icons" dir="/ws7/lib/icons" name="es-internal" NameTrans fn="assign-name" from="/fcgi/*" name="fcgi.config" </object> <Object name="fcgi.config"> AuthTrans fn="auth-fastcgi" app-path="/fastcgi/apps/c/simpleAuth" bind-path="localhost:2111" Service fn="responder-fastcgi" app-path="/fastcgi_enabled_php_installation_dir/bin/php" app-env="name1=abc" </object> ...
請注意,針對不同的 URL 樣式定義不同的物件或將 SAF 對映至不同的 MIME 類型,便可以不同的方式呼叫 FastCGI SAF。
如需有關 obj.conf 配置與語法的更多資訊,請參閱 「Sun Java System Web Server 7.0 Update 3 Administrator’s Configuration File Reference」中的第 6 章「Syntax and Use of obj.conf」。
您無法透過管理主控台或 CLI 配置多個 FastCGI 應用程式。為解決此問題,您可以修改 obj.conf 檔案,藉以配置多個應用程式。例如:
<If> $uri =~ '^/fcgi/(.*)'>
Service fn="responder-fastcgi" app-path="/export/home/bits/fastcgi/fcgi-2.4.0/examples/$1" app-env="LD_LIBRARY_LIBRARY_PATH=/export/home/bits/fastcgi/fcgi-2.4.0/libfcgi/.libs"</If>
此表示式會建立不需個別配置的 <app-path> 程序。
您不可對多個應用程式配置相同的 bind-path。這會導致啟動作業因 bind-path 相同而失敗。
虛擬主機環境的用途,在於防止因與數個虛擬伺服器共用 PHP 引擎,所產生的潛在安全性與效能問題。
使用 Web Server 7.0 環境變數,即可指定與連結至每部虛擬伺服器的個別引擎相同的 PHP 二進位檔。您應確定每部虛擬伺服器皆有自己的 php.ini 檔案。
Service fn=responder-fastcgi app-path="/path/to/php/php_fcgi" bind-path="$(lc($urlhost))" req-retry=5 type="*magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 |
Web 伺服器 tmp 目錄此時會顯示 Unix 網域通訊端,這些通訊端的名稱由來是處理 PHP 請求的個別虛擬伺服器。對所有使用者使用單一 PHP FastCGI 二進位檔,即會出現此情形。因此,所有以此單一二進位檔編譯的必要外掛程式,都將由該二進位檔進行處理掌控。上述問題的解決方案就是確定每位使用者皆有符合其本身需求的 PHP 二進位檔副本。
Service fn=responder-fastcgi app-path="/path/to/users/$(lc($urlhost))/php_fcgi" bind-path="$(lc($urlhost))" req-retry=5 type="*magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 |
您也可以控制 URI 空間的結構,而讓每個應用程式使用不同的 PHP 二進位檔。
例如:
若 URI 空間的結構如下:
/app/foo.php
其中,/app 是整體應用程式的名稱,且在以 PHP 檔案結尾的 URI 結構中一律為第一個目錄。
<If uri~=^/(\w+)/\w+\.php$> Service fn=responder-fastcgi app-path="/path/to/users/$(lc($urlhost))/$1/php_fcgi" bind-path="$(lc($urlhost))_$1" req-retry=5 type=+magnus-internal/fastcgi*" app-env="PHPRC=/path/to/users/$(lc($urlhost))/config" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" min-procs=1 restart-interval=10 bucket="php-bucket" rlimit_cpu=60 </If> |
這會呼叫一個特別建置的 PHP FastCGI 二進位檔,而該檔案會連結至具有唯一名稱的 Unix 網域通訊端。因此,這不會影響到其他 PHP 應用程式或虛擬伺服器。但是,由於此程序伴隨著許多 PHP 程序,因此會耗用大量的記憶體。
以下是使用 FastCGI 配置 PHP 的配置檔案範例。
<If -f $path> Service type="magnus-internal/php" fn="responder-fastcgi" app-path="/opt/coolstack/php5/bin/php-cgi" bind-path="localhost:3101" app-env="PHPRC=/opt/coolstack/php5" app-env="PHP_FCGI_CHILDREN=5" app-env="PHP_FCGI_MAX_REQUEST=200" app-env="FCGI_WEB_SERVER_ADDRS=127.0.0.1" req-retry=5 restart-interval=10 bucket="php-bucket" </If> <Else> Service type="magnus-internal/php" fn="set-variable" error="404" </Else>
Fastcgistub 是一個程序管理程式,用於管理 FastCGI 應用程式程序的生命週期。Fastcgistub 將其訊息記錄至 Web 伺服器暫存目錄下的 Fastcgistub.log 檔案中。發生任何錯誤時,檢查此檔案有助於消除問題。
問題:FastCGI 請求未得到處理
可能的原因及解決方案如下:
請檢查是否載入 FastCGI 外掛程式。如果在啟動 Web 伺服器期間出現下列訊息,則表示已成功載入外掛程式。另外,請檢查 magnus.conf 中的外掛程式程式庫的路徑:FCGI1000: Sun Java System Web Server 7.0 Update 3 FastCGI NSAPI Plugin <建置資訊>
請檢查在 obj.conf 中是否正確指定請求對映。如需有關 obj.conf 檔案的更多資訊,請參閱「Sun Java System Web Server Administrator's Configuration Reference File」。
請檢查錯誤記錄中的任何可能錯誤訊息。
請檢查 stub 二進位檔及 FastCGI 應用程式的權限。如果未授予足夠的權限,則外掛程式將無法啟動 stub 或應用程式。有關
請檢查 Fastcgistub.log 檔案中有關 stub 端的任何可能錯誤。您可以在 <instances>/logs 中找到記錄的詳細資訊。
如果可能,請以獨立模式執行 FastCGI 應用程式,檢查該應用程式是否能夠正確無誤地執行。
如果丟出任何程式庫相依性錯誤,請在 obj.conf 中將 LD_LIBRARY_PATH 指定為具有 LD_LIBRARY_PATH=<相依性程式庫路徑> 值的 app-env 參數。
問題:FastCGI 應用程式未啟動。
可能的原因及解決方案如下:
請檢查 Fastcgistub.log 檔案中的下列記錄訊息: |
.. <pid> process startup failure, trying to restart ... Even after trying <n> time(s), <application path> process failed to start...no more retries
啟動失敗的原因之ㄧ可能是由於無法載入相依性程式庫。此問題可透過以下方式解決:將適當的程式庫路徑當成 app-env 參數值,指定給 obj.conf 檔案中配置的 FastCGI 應用程式。例如:
Service fn="responder_fastcgi" app-path="/fastcgi/c/tux-app" bind-path="localhost:2112" app-env="LD_LIBRARY_PATH=/tuxedo/lib" |
您可以使用 Perl、PHP、C 和 Java 開發 FastCGI 應用程式。下列小節簡要說明使用一些常用程式設計語言開發應用程式的程序。
一般 FastCGI 應用程式具有以下程式碼結構:
Initialization code Start of response loop body of response loop End of response loop
初始化程式碼僅在應用程式初始化時執行一次。初始化程式碼通常執行一些耗時作業,例如開啟資料庫或者計算表格或點陣圖的值。將 CGI 程式轉換為 FastCGI 程式的主要作業,是區分初始化程式碼與針對每個請求都需要執行的程式碼。
回應迴圈會持續執行,等待用戶端請求到達。迴圈以呼叫 FCGI_Accept (FastCGI 程式庫中的常式) 開頭。FCGI_Accept 常式將封鎖程式執行,直到用戶端請求 FastCGI 應用程式為止。收到用戶端請求時,FCGI_Accept 將解除封鎖、執行回應迴圈主體的一次重複運算,之後再次封鎖,等待另一個用戶端請求。僅當系統管理員或 Web 伺服器強制結束 FastCGI 應用程式時,此迴圈才會終止。
從 CPAN 下載並安裝最新的 FCGI 模組。就 ActivePerl 而言,您可以從 http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/Zips 下載模組。
如需有關使用 Perl 撰寫 FastCGI 應用程式的更多資訊,請參閱 http://www.fastcgi.com/#TheDevKit
從 PHP 4.3.0 開始,FastCGI 成為 PHP 引擎支援的配置。若要編譯支援 FastCGI 之 PHP 4.3.x 或更高版本的引擎,請將配置切換 --enable-fastcgi 納入建立程序,例如
./configure <other-options> --enable-fastcgi gmake |
編譯完成後,php 二進位檔將啟用 FastCGI。
當使用 PHP 版本 5.1.2 或舊版 (包括 PHP 4.x) 時,應使用 host: port 格式配置 FastCGI 外掛程式。例如,bind-path = “localhost: 3333”。
對於 PHP 版本 5.1.3 及更高版本,bind-path 是可選擇的。如果已指定,則不應使用「host: port」格式。它可以是一個字串。例如,bind-path = “myphpbindpath”。
FastCGI 開發工具組提供撰寫 FastCGI C/Java 應用程式的 API。您可以從 http://www.fastcgi.com/devkit/doc/fcgi-devel-kit.htm 下載工具組。
若要建立下載的 FastCGI 開發套件,請執行下列步驟:
如需有關使用 C 撰寫 FastCGI 應用程式的更多資訊,請參閱 http://www.fastcgi.com/devkit/doc/fcgi-devel-kit.htm#S3
如需有關使用 Java 撰寫 FastCGI 應用程式的更多資訊,請參閱 http://www.fastcgi.com/devkit/doc/fcgi-java.htm
從 http://www.sun.com/download/index.jsp 下載啟用 FastCGI 的 Sun Java System Web Server 7.0 PHP Add-On 1.0
將 PHP 配置為 Web 伺服器上的 FastCGI 伺服器。
將 phppack-5_2_0*.zip 解壓縮至 /export/home
$ cd /export/home; unzip phppack-5_2_0*.zip |
啟動管理伺服器。
$ <webserver-install-root>/admin-server/bin/startserv |
使用管理主控台配置 FastCGI 處理程式。
登入管理主控台。
按一下 [虛擬伺服器作業] 中的 [編輯虛擬伺服器]。
按一下 [虛擬伺服器一般特性] 中的 [內容處理] 標籤。
按一下 [內容處理 — 一般特性] 中的 [FastCGI] 標籤。
按一下 [新增] 按鈕,使用 FastCGI 處理程式對映增加新的 URI。
輸入下列值:
套用至:選取 [新增 URI] 並輸入 /fastcgi/*
角色:從下拉式清單中選取 [回應程式]。
應用程式路徑:輸入 /export/home/php/bin/php 做為路徑。
環境變數:輸入變數:
"PHPRC=/export/home/php","LD_LIBRARY_PATH=/export/home/php", "LD_LIBRARY_PATH_64=/export/home/php/64" |
按一下 [確定] 按鈕。如果需要,您可以按一下配置的 [部署] 按鈕。
建立符號連結。
$ ln -s <webserver-install-root>/samples/fastcgi <webserver-instance-docroot> |
執行範例。
Hello World URL 範例
http://<host-name>:<webserver-instance-port>/fastcgi/HelloWorld.php
目錄清單 URL 範例
http://<host-name>:<webserver-instance-port>/fastcgi/directory.php
頁面計數器 URL 範例
http://<host-name>:<webserver-instance-port>/fastcgi/pageCounter.php
伺服器資訊 URL 範例
http://<host-name>:<webserver-instance-port>/fastcgi/serverinfo.php
FastCGI 處理程式共有五個相關的 CLI 指令,如下所示:
呼叫下列指令以建立 FastCGI 處理程式。
wadm> create-fastcgi-handler --config=test --vs=test --uri-pattern=/php/* --role=filter --app-path=C:\\php\\phppack-5_2_0-windows-i586\\php\\php-cgi.exe |
此時會建立具有 [篩選器] 角色的 FastCGI 處理程式。
如需更多資訊,請參閱 CLI 參考資料 create-fastcgi-handler(1)
呼叫指令以部署配置。
wadm> deploy-config test |
如果您是第一次建立 FastCGI 處理程式,則應在部署配置後重新啟動實例。
wadm> restart-instance --config=test localhost |