<-
Apache > HTTP Server > 文件 > 2.4 版 > 模組

Apache 模組 mod_cgi

語言:  en  |  fr  |  ja  |  ko 

說明執行 CGI 腳本
狀態基礎
模組識別碼cgi_module
原始檔mod_cgi.c

摘要

任何使用處理常式 cgi-script 的檔案會被視為 CGI 腳本,由伺服器執行,而其產出會傳回至用戶端。檔案取得此處理常式的方式可以是使用已定義 AddHandler 指令副檔名的名稱,或是放在 ScriptAlias 目錄內。

如需使用 Apache 的 CGI 腳本入門,請參閱我們關於 使用 CGI 建立動態內容 的教學課程。

在 Unix 環境中使用多執行緒 MPM 時,應以 mod_cgid 模組取代此模組。在使用者層級,這兩個模組基本上相同。

為了維持向後相容性,cgi-script 處理常式也會啟用任何使用 MIME 類型為 application/x-httpd-cgi 的檔案。不建議使用神奇 MIME 類型。

Support Apache!

主題

指令

除錯檢查清單

另請參閱

top

CGI 環境變數

伺服器會設定 CGI 規範 中所說明 的 CGI 環境變數,並有下列規定

PATH_INFO
如果明確將指令碼 AcceptPathInfo 設定為 off,則此行為無法提供。如果未提供 AcceptPathInfo,預設行為是 mod_cgi 將接受路徑資訊(URI 中的腳本檔名後會加上尾端的 /more/path/info),而核心伺服器會對具有其他路徑資訊的要求傳回 404 NOT FOUND 錯誤。未指定 AcceptPathInfo 指令就像對 mod_cgi 要求設定為 On 一樣。
REMOTE_HOST
這只會在 HostnameLookups 設定為 on 的條件下才會設定(預設為 off),而且如果存取主機的地址反向 DNS 查詢確實找到主機名稱。
REMOTE_IDENT
這只會在 IdentityCheck 設定為 on,而且存取主機支援 ident 協定的條件下才會設定。請注意,這個變數的內容並不可靠,原因在於它很容易被偽造,而且如果在用戶端和伺服器之間有代理伺服器,那麼這個變數通常毫無用處。
REMOTE_USER
這只會在 CGI 腳本受驗證的條件下才會設定。

這個模組也利用核心函式 ap_add_common_varsap_add_cgi_vars,加入像是以下的環境變數:

DOCUMENT_ROOT
使用相關 DocumentRoot 指令的內容設定。
SERVER_NAME
與要求相關的完整網域名稱。
SERVER_ADDR
提供要求服務的虛擬主機的 IP 位址。
SERVER_ADMIN
使用相關 ServerAdmin 指令的內容設定。

對於詳盡的清單,建議撰寫一個基礎的 CGI 腳本,以便利的格式轉儲 Apache 傳遞的所有環境變數。

top

CGI除錯

追蹤 CGI 腳本的錯誤傳統上很困難,這主要是因為無法檢視執行錯誤的腳本的輸出(標準輸出和錯誤)。這些指令會在錯誤發生時提供更詳細的錯誤記錄。

CGI 記錄檔格式

設定完畢後,CGI 錯誤記錄檔會記錄任何執行不當的 CGI。每個運作失敗的 CGI 腳本都會造成多行資訊被記錄下來。前兩行總是符合以下格式:

%% [時間] 要求行
%% HTTP 狀態 CGI 腳本檔案名稱

如果錯誤是無法執行 CGI 腳本,則記錄檔會包含額外的兩行:

%%錯誤
錯誤訊息

或者,如果錯誤是腳本傳回的標頭資訊不正確(通常是腳本中的錯誤所造成),則會記錄以下資訊:

%要求
收到所有 HTTP 要求標頭
POST 或 PUT 實體(如有)
%response
CGI 程式碼輸出的所有標頭
%stdout
CGI 標準輸出
%stderr
CGI 標準錯誤

(如果指令碼未在標準輸出或標準錯誤輸出任何內容,則 %stdout 和 %stderr 部分可能會遺失。)

top

CGIScriptTimeout 指令

說明從 CGI 程式等待更多輸出的時間長度
語法CGIScriptTimeout 時間[s|ms]
預設值未設定時 Timeout 指令的值
內容伺服器設定、虛擬主機、目錄、.htaccess
狀態基礎
模組mod_cgi
相容性可用於版本 2.4.59 和後續版本。

此指令限制從 CGI 程式等待更多輸出的時間長度。如果超過時間,則會終止要求和 CGI。

範例

CGIScriptTimeout 20
top

ScriptLog 指令

說明CGI 程式碼錯誤記錄檔的位置
語法ScriptLog 檔案路徑
內容伺服器設定、虛擬主機
狀態基礎
模組mod_cgimod_cgid

ScriptLog」指令設定 CGI 程式碼錯誤記錄檔。如果未提供「ScriptLog」,則不會建立錯誤記錄。如果提供了,任何 CGI 錯誤都會記錄在給定為引數的檔案名稱中。如果這是相對檔案或路徑,則基於「ServerRoot」區分大小寫。

範例

ScriptLog logs/cgi_log

此記錄將開啟為子行程執行所使用的使用者,User」主要指令中指定的使用者。這表示存放程式碼記錄的目錄必須由該使用者寫入,或者必須手動建立檔案並設定為該使用者可寫入。如果您將程式記錄放在主記錄目錄中,請不要變更目錄權限,讓子行程執行的使用者可以寫入。

請注意,程式記錄用於編寫 CGI 程式碼的偵錯功能,並非用於持續啟用執行伺服器。針對速度或效率未最佳化,如果以非設計用途使用,可能會出現安全問題。

top

ScriptLogBuffer 指令

說明將記錄在 scriptlog 中的 PUT 或 POST 要求的最大量
語法ScriptLogBuffer 位元組大小
預設值ScriptLogBuffer 1024
內容伺服器設定、虛擬主機
狀態基礎
模組mod_cgimod_cgid

任何記錄至檔案的 PUT 或 POST 實體主體的大小是有限制的,以防止在收到大量主體時記錄檔過於快速增長。預設情況下,記錄多達 1024 個位元組,但可以使用此指令變更。

top

ScriptLogLength 指令

說明CGI 腳本記錄檔大小限制
語法ScriptLogLength 位元組
預設值ScriptLogLength 10385760
內容伺服器設定、虛擬主機
狀態基礎
模組mod_cgimod_cgid

ScriptLogLength 可用於限制 CGI 腳本記錄檔大小。由於記錄檔會記錄每個 CGI 錯誤大量資料(所有要求標頭、所有腳本輸出),因此它可能會長成一個大檔案。為了解決因不受限的成長而產生的問題,此指令可用於設定 CGI 記錄檔的最大檔案大小。如果檔案超過此大小,就不會再寫入任何資料到其中。

語言:  en  |  fr  |  ja  |  ko 

top

回應

注意事項
這不是問題解答區。放在此處的意見應朝向改進文件或伺服器的建議,如果這些意見已經實作或被認為無效/與主題無關,我們的管理員可能會移除它們。關於如何管理 Apache HTTP Server 的問題應引導至我們的 IRC 頻道 #httpd (在 Libera.chat 上) 提出,或傳送至我們的 郵件列表