欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<-
Apache > HTTP Server > 文檔 > 版本2.2 > 模塊
   致謝 | 譯者聲明 | 本篇譯者:金步國 | 本篇譯稿最后更新:2006年1月24日 | 獲取最新版本

Apache模塊 mod_cgi

說明在非線程型MPM(prefork)上提供對CGI腳本執(zhí)行的支持
狀態(tài)基本(B)
模塊名cgi_module
源文件mod_cgi.c

概述

任何具有MIME類型application/x-httpd-cgi或者被cgi-script處理器處理的文件都將被作為CGI腳本對待并由服務(wù)器運(yùn)行,它的輸出將被返回給客戶端?梢酝ㄟ^兩種途徑使文件成為CGI腳本,一種是文件具有已由AddType指令定義的擴(kuò)展名,另一種是文件位于ScriptAlias目錄中。

當(dāng)服務(wù)器調(diào)用一個CGI腳本時會往運(yùn)行環(huán)境中添加一個叫做DOCUMENT_ROOT的變量。這個變量將包含DocumentRoot指令的值。

要得到對Apache中使用CGI腳本的介紹,參看使用CGI產(chǎn)生動態(tài)內(nèi)容。

在UNIX下使用多線程型的MPM時,應(yīng)該使用模塊mod_cgid代替本模塊。在用戶層面,這兩個模塊本質(zhì)上是相同的。

top

CGI環(huán)境變量

Apache將按照CGI規(guī)范設(shè)置環(huán)境變量,有以下幾個:

PATH_INFO
如果顯式設(shè)置了AcceptPathInfo指令為 off ,這個變量將不可用。如果沒有明確設(shè)置AcceptPathInfo ,默認(rèn)的行為是mod_cgi將會接受路徑信息(URI里腳本文件名之后的/more/path/info),即使服務(wù)器核心對請求的附加路徑信息返回"404 NOT FOUND"錯誤。省略AcceptPathInfo指令與將它設(shè)置為 Onmod_cgi請求具有相同的效果。
REMOTE_HOST
這個變量只有在HostnameLookups指令被設(shè)置為"on"(默認(rèn)是"off")并且對訪問主機(jī)的DNS反查確實(shí)找到了主機(jī)名時才被設(shè)置。
REMOTE_IDENT
這個變量只有在IdentityCheck被設(shè)置為 on 并且訪問主機(jī)支持識別協(xié)議時才被設(shè)置。注意這個變量不能信賴,因為它很容易被假冒。而且如果客戶端與服務(wù)器之間存在代理的話,這個變量通常完全沒有用處。
REMOTE_USER
這個變量只有當(dāng)CGI腳本需要身份驗證時才被設(shè)置。
top

CGI腳本的調(diào)試

調(diào)試CGI腳本一直以來都很困難,主要是因為在腳本不能正確運(yùn)行時不可能研究它的輸出(stdout和stderr)。這些指令為發(fā)生錯誤時提供了更詳細(xì)的錯誤日志。

CGI日志文件格式

配置好以后,CGI錯誤日志會記錄任何沒有正確運(yùn)行的CGI。每個運(yùn)行失敗的CGI腳本都有幾行信息被記錄。頭兩行總是這樣的格式:

%% [time] request-line
%% HTTP-status CGI-script-filename

如果錯誤是CGI腳本無法執(zhí)行,日志文件會包含以下額外的兩行:

%%error
error-message

或者,如果錯誤是腳本執(zhí)行結(jié)果返回了不正確的頭信息(經(jīng)常是由于腳本內(nèi)部的bug),會記錄以下兩行:

%request
All HTTP request headers received
POST or PUT entity (if any)
%response
All headers output by the CGI script
%stdout
CGI standard output
%stderr
CGI standard error

如果腳本沒有在stdout和stderr上輸出可能會沒有%stdout和%stderr部分。

top

ScriptLog 指令

說明CGI腳本錯誤日志文件的位置
語法ScriptLog file-path
作用域server config, virtual host
狀態(tài)基本(B)
模塊mod_cgi, mod_cgid

ScriptLog指令設(shè)置了CGI腳本錯誤日志文件的位置。如果沒有設(shè)置ScriptLog ,就不會創(chuàng)建錯誤日志。如果設(shè)置了,所有CGI錯誤都會被記入作為指令參數(shù)的文件中。如果是一個相對路徑則以ServerRoot為參照。

示例

ScriptLog logs/cgi_log

此日志會以運(yùn)行子進(jìn)程的用戶身份打開,比如由主服務(wù)器配置部分的User指令指定的用戶。這意味著,或者該用戶對腳本日志所在目錄具有寫權(quán)限,或者日志文件由此用戶手工創(chuàng)建并設(shè)置為可寫。如果你把腳本日志放在你的主日志目錄中,不要為了讓運(yùn)行子進(jìn)程的用戶可以寫日志而改變目錄的權(quán)限。

注意,腳本日志是為了給創(chuàng)建CGI腳本提供一個調(diào)試特性,而不是要在運(yùn)行服務(wù)時持續(xù)保持活動狀態(tài)。它沒有為速度或是效率作優(yōu)化,而且與專門設(shè)計的那些特性不同,在某種程度上它會存在安全問題。

top

ScriptLogBuffer 指令

說明記入日志文件的PUT或POST請求頭的最大數(shù)量
語法ScriptLogBuffer bytes
默認(rèn)值ScriptLogBuffer 1024
作用域server config, virtual host
狀態(tài)基本(B)
模塊mod_cgi, mod_cgid

限制記入日志文件的PUT或者POST內(nèi)容的大小,防止如果接收到很大內(nèi)容時日志文件的尺寸增加得太快太大。默認(rèn)地,最多紀(jì)錄1024字節(jié),但這個數(shù)字可以用此指令改變。

top

ScriptLogLength 指令

說明日志文件的大小限制(字節(jié))
語法ScriptLogLength bytes
默認(rèn)值ScriptLogLength 10385760
作用域server config, virtual host
狀態(tài)基本(B)
模塊mod_cgi, mod_cgid

ScriptLogLength指令可以用于限制CGI腳本文件的大小。由于日志文件對每個CGI錯誤紀(jì)錄(所有請求頭、所有腳本輸出)許多信息,它有可能會變成一個很大的文件。為了防止無限制的增長引起的問題,這個指令可以用來給CGI日志文件的大小設(shè)置一個上限。如果文件大小達(dá)到了這個限制,就不會再有信息被寫入日志。