IBM HTTP Server 說明:FastCGI 指引

FastCGI 指引

FastCgiAccessChecker

FastCgiAccessChecker 指引可用來將 FastCGI 應用程式定義為每一目錄存取的驗證程式。 Apache Access 階段發生於使用者鑑別之前, 因此,對於容許 (或不容許) 存取所要求的資源, 這項決定是基於隨該要求送出的 HTTP 標頭。當存取驗證決策涉及動態因素時,例如,日期時間或網域帳戶是否更新,以 FastCGI 為基礎的授權程式就非常有用。

若 FastCGI 應用程式檔名不具有對應的靜態或外部伺服器定義, 則當做動態 FastCGI 應用程式來啟動。 若檔名開頭不是斜線 (/),則假設為相對於 ServerRoot。

FastCgiAccessChecker 使用於目錄位置配置區。

<Directory htdocs/protected>
FastCgiAccessChecker fcgi-bin/access-checker
</Directory>

mod_fastcgi 可傳送一般可用的全部 (幾乎) 標準環境變數到 CGI/FastCGI 要求操縱器。在成功回應中 (狀態:200),由 FastCGI 存取檢查程式所傳回的所有標頭,皆當做環境變數傳送到子處理程序 (CGI/FastCGI 呼叫)。 在失敗回應中傳回的所有標頭, 則傳送到從屬站。FastCGI 規格相容行為可以透過 "-compat" 選項來取得。

mod_fastcgi 將環境變數 "FCGI_APACHE_ROLE" 設定為 "ACCESS_CHECKER", 指出要執行的授權程式階段 (Apache 專用)。

來自 FastCGI 授權應用程式的自訂失敗回應不被支援。 如果要閱讀實例,請參閱 ErrorDocument 指引 (FastCGI 應用程式可提供此文件)。

FastCgiAccessCheckerAuthoritative

明確地將 FastCgiAccessCheckerAuthoritative 指引設定為 Off, 可在 FastCGI 應用程式無法容許存取時,讓存取檢查跳到較低層次的模組 (定義於配置檔和 modules.c 檔案中)。

依預設值,不會跳過控制權,且失敗的存取檢查將產生一個「禁止」回覆。 要停用預設值之前應該考慮清楚。

FastCgiAuthenticator

FastCgiAuthenticator 指引用來將 FastCGI 應用程式定義為每一目錄的驗證程式。 驗證程式將已提供的使用者名稱和密碼,比對已知的使用者名稱和密碼清單或資料庫,以驗證要求端的真正身份。當使用者資料庫在現存獨立的程式中維護時,或位於 Web 伺服器以外的機器上,以 FastCGI 為基礎的鑑別程式就非常有用。

若 FastCGI 應用程式檔名不具有對應的靜態或外部伺服器定義, 則當做動態 FastCGI 應用程式來啟動。 若檔名開頭不是斜線 (/),則假設為相對於 ServerRoot

FastCgiAuthenticator 使用於目錄位置配置區中, 且必須包含一個 AuthType 和 AuthName 指引。僅支援 Basic 使用者鑑別類型。 它必須搭配一個 require 或 FastCgiAuthorizer 指引,才能正確運作。

<Directory htdocs/protected>
AuthType Basic
AuthName ProtectedRealm
FastCgiAuthenticator fcgi-bin/authenticator
require valid-user
</Directory>

mod_fastcgi 可傳送一般可用的全部 (幾乎) 標準環境變數到 CGI/FastCGI 要求操縱器。 在成功回應中 (狀態:200),由 FastCGI 鑑別應用程式所傳回的所有標頭, 皆當做環境變數傳送到子處理程序 (CGI/FastCGI 呼叫)。在失敗回應中傳回的所有標頭, 則傳送到從屬站。FastCGI 規格相容行為可以透過 "-compat" 選項來取得。

Mod_fastcgi 將環境變數 "FCGI_APACHE_ROLE" 設定為 "AUTHENTICATOR",指出要執行的授權程式階段 (Apache 專用)。

來自 FastCGI 授權應用程式的自訂失敗回應不被支援。如果要閱讀實例, 請參閱 ErrorDocument 指引 (FastCGI 應用程式可提供此文件)。

FastCgiAuthenticatorAuthoritative

明確地將 FastCgiAuthenticatorAuthoritative 指引設定為 Off, 可在 FasCGI 應用程式無法鑑別使用者時,讓鑑別跳到較低層次的模組 (定義於配置檔和 modules.c 檔案中)。

常用方法是結合一個受到充分保護的 AuthUserFile, 其中含有少數 (和管理相關的) 使用者。 

依預設值,不會跳過控制,不明使用者將產生一個「需要授權」回覆。 要停用預設值之前應考慮清楚。

FastCgiAuthorizer

FastCgiAuthorizer 您可以使用指引來定義一個 FastCGI 應用程式, 如各個目錄的授權機構。  授權機構驗證授權的使用者,其對所要求的資源的存取權限。  存取驗證決策涉及動態因素時,例如,日期時間或網域帳戶是否更新,以 FastCGI 為基礎的授權程式就非常有用。 

若 FastCGI 應用程式檔名不具有對應的靜態或外部伺服器定義, 則當做動態 FastCGI 應用程式來啟動。若檔名開頭不是斜線 (/),則假設為相對於 ServerRoot

FastCgiAuthorizer 使用於 目錄位置配置區中, 且必須包含一個 AuthType 和 AuthName 指引。它必須搭配一個 authentication 或 FastCgiAuthorizer 指引,如 FastCgiAuthenticator, AuthUserFile, AuthDBUserFile 或 AuthDBMUserFile, 才能正確運作。

.

<Directory htdocs/protected>
AuthType Basic
AuthName ProtectedRealm
AuthDBMUserFile conf/authentication-database
FastCgiAuthorizer fcgi-bin/authorizer
</Directory>

mod_fastcgi 可傳送一般可用的全部 (幾乎) 標準環境變數到 CGI/FastCGI 要求操縱器。在成功回應中 (狀態:200),由 FastCGI 鑑別應用程式所傳回的所有標頭, 皆當做環境變數傳送到子處理程序 (CGI/FastCGI 呼叫)。在失敗回應中傳回的所有標頭, 則傳送到從屬站。FastCGI 規格相容行為可經由 "-compat" 選項來取得。

Mod_fastcgi 將環境變數 "FCGI_APACHE_ROLE" 設定為 "AUTHORIZER" 指出要執行的授權程式階段 (Apache 專用)。

不支援 FastCGI 授權應用程式的自訂失敗回應。 如果要閱讀實例,請參閱 ErrorDocument 指引 (FastCGI 應用程式可提供此文件)。

FastCgiAuthorizerAuthoritative

明確地將 FastCgiAuthenticatorAuthoritative 指引設定為 Off, 可在 FasCGI 應用程式無法鑑別使用者時,讓鑑別跳到較低層次的模組 (定義於配置檔和 modules.c 檔案中)。

常用方法是結合一個受到充分保護的 AuthUserFile, 其中含有少數 (和管理相關的) 使用者。 

依預設值,不會跳過控制,不明使用者將產生一個「需要授權」回覆。 要停用預設值之前應考慮清楚。

FastCgiConfig

FastCgiConfig 指引定義全部動態 FastCGI 應用程式的預設參數。此指引絕不影響靜態或外部應用程式。

動態應用程式不在伺服器起始設定時啟動,而是依需求來啟動。 若需求很大,則啟動其它應用程式實例。隨著需求降低, 應用程式實例就逐漸減少。許多選項可支配此程序。

選項包括下列其中一個 (不區分大小寫):

appConnTimeout n (0 秒)
完成 FastCGI 應用程式連接所需等待的秒數, 或 0 表示使用一個暫停執行的 connect()。 若逾時到期,則產生一個  SERVER_ERROR。 對於非零值,這表示花費在 select() 的時間量, 目的是為了寫入到非暫停執行的 connect() 所傳回的檔案描述子。在許多平台上,非暫停執行的 connect() 有些麻煩。 亦請參閱 -idle-timeout,該選項產生類似的結果, 但更具有可攜性。
idle-timeout n (30 秒)
在中止要求和記載事件之前 (在 error LogLevel), 容許 FastCGI 應用程式停用的秒數。 不活動計時器僅適用於 FastCGI 應用程式的連接擱置時。 若應用程式的佇列中有一個要求,但應用程式未於此期間內回應 (經由寫入和沖寫),則將中止要求。若完成應用程式的通信, 但和從屬站的通信未完成 (回應進入緩衝),則不適用逾時。
autoUpdate none
此選項可在處理每一個要求之前,先讓 mod_fastcgi 在磁碟上檢查應用程式的經歷時間。 若應用程式很新,則通知處理管理系統, 然後結束應用程式的所有執行實例。一般而言, 這種功能最好內建於應用程式中(例如,每 100 個要求就檢查一次, 查詢磁碟上是否有較新的版本,如果有,則結束)。 當此選項使用 -restart 時,可能會發生一個未解決的問題(錯誤(。
gainValue n (0.5)
一個介於 0 和 1 之間的浮點值,在計算目前執行之動態 FastCGI 應用程式的指數遞減連接時間載入因數時,用來做為一個指數。 舊的值以 (1 - gainValue) 來調整,因此, 此調整式愈小,舊的值相對於現行值(由 gainValue 調整)的加權值就愈大。
initial-env name[=value] none
應用程式的實例產生時,要傳入起始環境中的 name-value 組合。 如果要傳送來自 Apache 環境的變數,請勿提供 "=" (若變數實際上不在環境中,則定義時沒有值)。 如果要定義不含值的變數,請提供 "=",不加任何值。此選項可重複使用。
init-start-delay n (1 秒)
產生此應用程式實例時,最小的間隔秒數。此延遲時間可降低系統在伺服器起始設定時產生的需求。
killInterval n (300 秒)
killInterval 決定動態應用程式實例結束策略在處理管理系統內的實施頻率。 較小數字可產生較積極的策略,較大數字可產生較消極的策略。
listen-queue-depth n (100)
此應用程式的全部實例所共用的 listen() 佇列深度 (亦稱為 backlog)。 較深的接收佇列,可讓伺服器巧妙應付暫時載入量變動,但不會拒絕要求; 它不會增加產量。 新增其它應用程式實例可能增加產量/效能,視應用程式和主電腦而定。
maxClassProcesses n (10)
對於任何 FastCGI 應用程式,容許執行的最大動態 FastCGI 應用程式實例數目。
maxProcesses n (50)
容許同時執行的動態 FastCGI 應用程式實例最大總數。
minProcesses n (5)
容許同時執行的動態 FastCGI 應用程式實例最小總數, 不會被處理管理系統結束 (由於沒有需求)。
multiThreshhold n (50)
介於 0 和 100 之間的一個整數,決定是否應該終止 FastCGI 應用程式的任何實例。若應用程式目前有一個以上的實例正在執行, 此屬性將用來決定是否應該終止其中一個實例。 若只剩下一個實例,則使用 singleThreshhold 來代替。
pass-header header none
要傳入要求環境內的 HTTP「要求標頭」的名稱。 此選項使 CGI 環境通常無法使用的標頭內容(例如,授權)變成可使用。
priority n (0)
指定給應用程式實例的處理優先順序(使用 setpriority())。
processSlack n(5 秒)
若目前執行的動態 FastCGI 應用程式總數超過 maxProcesses - processSlack,處理管理系統會呼叫結束策略。 這可在達到 maxProcesses 之前,結束一些不活動的應用程式,增進高載入量的效能。
restart none
此選項可讓處理管理系統在失敗時重新啟動動態應用程式(類似靜態應用程式)。
restart-delay n(5 秒)
重新產生此應用程式的失敗實例時,最小的間隔秒數。 此延遲時間可防止已中斷的應用程式佔用太多系統資源。
singleThreshhold n (0)
介於 0 和 100 之間的一個整數,決定是否可終止 FastCGI 應用程式的最後一個實例。 若處理管理系統計算的應用程式載入因數低於指定的臨界值,則終止最後一個實例。 為了讓可執行檔以 "閒置" 模式長時間執行, 您可指定接近 1 的值,不過,若記憶體或 CPU 時間是重要考量, 接近 100 的值更為合適。0 這個值可防止終止應用程式的最後一個實例; 此為預設值,不建議變更 (尤其是設定 -appConnTimeout 時,更不可變更)。
startDelay n (3 秒)
嘗試連接動態 FastCGI 應用程式時,Web 伺服器所耐心等待的秒數。 若間隔時間到期,則通知處理管理系統,希望能夠啟動應用程式的另一個實例。 startDelay 必須小於 appConnTimeout 才有效。
updateInterval n  (300 秒)
updateInterval 決定多久執行一次統計分析,決定動態 FastCGI 應用程式的命運。

FastCgiExternalServer

appConnTimeout n (0 秒)
完成 FastCGI 應用程式連接所需等待的秒數, 或 0 表示使用一個暫停執行的 connect()。 若逾時到期,則產生一個  SERVER_ERROR。 對於非零值,這表示花費在 select() 的時間量, 目的是為了寫入到非暫停執行的 connect() 所傳回的檔案描述子。在許多平台上,非暫停執行的 connect() 有些麻煩。 亦請參閱 -idle-timeout,該選項產生類似的結果, 但更具有可攜性。
idle-timeout n (30 秒)
在中止要求和記載事件之前 (在 error LogLevel), 容許 FastCGI 應用程式停用的秒數。 不活動計時器僅適用於 FastCGI 應用程式的連接擱置時。 若應用程式的佇列中有一個要求,但應用程式未於此期間內回應 (經由寫入和沖寫),則將中止要求。若完成應用程式的通信, 但和從屬站的通信未完成 (回應進入緩衝),則不適用逾時。
flush none
接收到應用程式的資料時,強制寫入到從屬站。 依預設值,mod_fastcgi 將資料放入緩衝區內, 以便儘快地釋放應用程式。
host hostname:port none
應用程式和 Web 伺服器通信時所用的主電腦名稱或 IP 位址與 TCP 埠號 (1-65535)。 -socket-host 選項互斥。
Pass-header header none
要傳入要求環境內的 HTTP「要求標頭」的名稱。 此選項使 CGI 環境通常無法使用的標頭內容(例如,授權)變成可使用。
socket filename none
UNIX:應用程式在和 Web 伺服器通信時所用的 UNIX 網域 socket 的檔名。 該檔名相對於 FastCgiIpcDir-socket-port 兩個選項互斥。
Windows NT:  應用程式在和 Web 伺服器通信時所用的具名管線的名稱。 該名稱相對於 FastCgiIpcDir-socket -port 兩個選項互斥。

FastCgiIpcDir

UNIX: FastCgiIpcDir 指引指定目錄,用來儲存及尋找 (以外部 FastCGI 應用程式而言) 應用程式和 Web 伺服器之間通信時所用的 UNIX Socket 檔案。 若目錄的開頭不是斜線 (/),則假設為相對於 ServerRoot。 若目錄不存在,則嘗試以適當的許可權建立目錄。 請勿指定一個不在本端檔案系統上的目錄。 如果您使用預設目錄 (或 /tmp 內的另一個目錄), 當您的系統定期地刪除 /tmp 中的檔案時, mod_fastcgi 將中斷執行。

Windows NT: FastCgiIpcDir 指引指定名稱,做為應用程式和 Web 伺服器之間通信時所用之具名管線的根。 名稱的格式必須為 \\.\pipe\pipename pipename 部份可包含反斜線以外的任何字元。

FastCgiIpcDir 指引必須放在任何 FastCgiServerFastCgiExternalServer 指引之前 (使用 UNIX socket)。目錄必須可被 Web 伺服器讀取、寫入及執行 (搜尋),但不能被其他人存取。

FastCgiServer

FastCgiServer 指引將檔名定義為靜態 FastCGI 應用程式。若檔名的開頭不是斜線 (/), 則假設為相對於 ServerRoot。

依預設值,「處理管理系統」將使用下列指定的預設配置 (在括弧中) 啟動應用程式的一個實例。若一個靜態應用程式實例消滅了, mod_fastcgi 將產生另一個實例來代替, 並且記載此事件 (在 warn LogLevel)>

選項包括下列其中一個 (不區分大小寫):

appConnTimeoutn (0 秒)
完成 FastCGI 應用程式連接所需等待的秒數, 或 0 表示使用一個暫停執行的 connect()。 若逾時到期,則產生一個  SERVER_ERROR。 對於非零值,這表示花費在 select() 的時間量, 目的是為了寫入到非暫停執行的 connect() 所傳回的檔案描述子。在許多平台上,非暫停執行的 connect() 有些麻煩。 亦請參閱 -idle-timeout,該選項產生類似的結果, 但更具有可攜性。
idle-timeout n (30 秒)
在中止要求和記載事件之前 (在 error LogLevel), 容許 FastCGI 應用程式停用的秒數。 不活動計時器僅適用於 FastCGI 應用程式的連接擱置時。 若應用程式的佇列中有一個要求,但應用程式未於此期間內回應 (經由寫入和沖寫),則將中止要求。若完成應用程式的通信, 但和從屬站的通信未完成 (回應進入緩衝),則不適用逾時。
initial-env name[=value] none] none
要傳入 FastCGI 應用程式的起始環境內的 name-value 組合。 如果要傳送來自 Apache 環境的變數,請勿提供 "=" (若變數實際上不在環境中,則定義時沒有值)。 如果要定義不含值的變數,請提供 "=",不加任何值。此選項可重複使用。
init-start-delay n(1秒)
產生此應用程式實例時,最小的間隔秒數。此延遲時間可降低系統在伺服器起始設定時產生的需求。
Flush none
接收到應用程式的資料時,強制寫入到從屬站。 依預設值,mod_fastcgi 將資料放入緩衝區內, 以便儘快地釋放應用程式。
Listen-queue-depth n (100)
此應用程式的全部實例所共用的 listen() 佇列深度 (亦稱為 backlog)。 較深的接收佇列,可讓伺服器巧妙應付暫時載入量變動,但不會拒絕要求; 它不會增加產量。 新增其它應用程式實例可能增加產量/效能,視應用程式和主電腦而定。
Pass-header header none
要傳入要求環境內的 HTTP「要求標頭」的名稱。 此選項使 CGI 環境通常無法使用的標頭內容(例如,授權)變成可使用。
processes n (1)
起始設定伺服器時產生的應用程式實例數目。
Priority n (0)
指定給應用程式實例的處理優先順序 (使用 setpriority())。
port n none
應用程式和 Web 伺服器通信時所用的 TCP 埠號 (1-65535)。 此選項可讓網路上的其它機器 (以及本機器) 提供可存取的應用程式。 -socket-port 兩個選項互斥。
Restart-delay n (5 秒)
重新產生此應用程式的失敗實例時,最小的間隔秒數。 此延遲時間可防止已中斷的應用程式佔用太多系統資源。
Socket filename (gen'd)
UNIX:應用程式在和 Web 伺服器通信時所用的 UNIX 網域 socket 的檔名。 該模組在 FastCgiIpcDir 所指定的目錄中建立 Socket。 此選項讓應用程式可被相同機器上的其它應用程式 (例如,cgi-fcgi)存取,或透過外部 FastCGI 應用程式定義來存取 (FastCgiExternalServer)。 若不提供 -socket-port 選項, 該模組會產生一個 UNIX 網域 socket 檔名。-socket-port 兩個選項互斥。
Windows NT:應用程式在和 Web 伺服器通信時所用的具名管線的名稱。 該模組在 FastCgiIpcDir 所指定的具名管線根之下建立具名管線。 此選項讓應用程式可被相同機器上的其它應用程式存取(例如, cgi-fcgi),或透過外部 FastCGI 應用程式定義來存取 (FastCgiExternalServer)。若不提供 -socket-port 選項,該模組將為具名管線產生一個名稱。 -socket-port 兩個選項互斥。

 

FastCgiSuexec

FastCgiSuexec 指引是用來啟用 suexec-wrapper 的支援。 FastCgiSuexec 需要在 Apache 啟用 suexec (用於 CGI)。 如果要使用 Apache 所用的相同 suexec-wrapper,請將 FastCgiSuexec 設定為 On。如果要使用不同的 suexec-wrapper,請指定 suexec-wrapper 的檔名。若檔名開頭不是斜線 (/), 則假設為相對於 ServerRoot

若啟用 FastCgiSuexec,靜態或外部 FastCGI 應用程式定義的位置非常重要。這些定義從虛擬伺服器中的 UserGroup 指引來繼承使用者和群組。 UserGroup 指引應該放在 FastCGI 應用程式定義之前。請注意, 這不會限制虛擬伺服器上的 FastCGI 應用程式, 應用程式可以服務來自任何虛擬伺服器的要求 (由相同使用者和群組所提出)。 若接收到一個對於 FastCGI 應用程式的要求, 其中沒有正確使用者和群組的相符定義,則將以正確的使用者和群組啟動應用程式的一個動態實例。 這會導致許多個相同的應用程式以不同的使用者/群組執行。 若這樣產生問題,請防止從其它虛擬伺服器來瀏覽應用程式, 或以相同的 User 和 Group 來配置虛擬伺服器。

關於 suexec 的詳細資訊,請參閱 Apache 文件 (確定您充份瞭解安全性的意義)。

相關資訊