Apache HTTP Server 2.4 版
說明 | 執行 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 類型。
伺服器會設定 CGI 規範 中所說明 的 CGI 環境變數,並有下列規定
AcceptPathInfo
設定為 off
,則此行為無法提供。如果未提供 AcceptPathInfo
,預設行為是 mod_cgi
將接受路徑資訊(URI 中的腳本檔名後會加上尾端的 /more/path/info
),而核心伺服器會對具有其他路徑資訊的要求傳回 404 NOT FOUND 錯誤。未指定 AcceptPathInfo
指令就像對 mod_cgi
要求設定為 On
一樣。HostnameLookups
設定為 on
的條件下才會設定(預設為 off),而且如果存取主機的地址反向 DNS 查詢確實找到主機名稱。IdentityCheck
設定為 on
,而且存取主機支援 ident 協定的條件下才會設定。請注意,這個變數的內容並不可靠,原因在於它很容易被偽造,而且如果在用戶端和伺服器之間有代理伺服器,那麼這個變數通常毫無用處。這個模組也利用核心函式 ap_add_common_vars 和 ap_add_cgi_vars,加入像是以下的環境變數:
DocumentRoot
指令的內容設定。ServerAdmin
指令的內容設定。對於詳盡的清單,建議撰寫一個基礎的 CGI 腳本,以便利的格式轉儲 Apache 傳遞的所有環境變數。
追蹤 CGI 腳本的錯誤傳統上很困難,這主要是因為無法檢視執行錯誤的腳本的輸出(標準輸出和錯誤)。這些指令會在錯誤發生時提供更詳細的錯誤記錄。
設定完畢後,CGI 錯誤記錄檔會記錄任何執行不當的 CGI。每個運作失敗的 CGI 腳本都會造成多行資訊被記錄下來。前兩行總是符合以下格式:
%% [時間] 要求行
%% HTTP 狀態 CGI 腳本檔案名稱
如果錯誤是無法執行 CGI 腳本,則記錄檔會包含額外的兩行:
%%錯誤
錯誤訊息
或者,如果錯誤是腳本傳回的標頭資訊不正確(通常是腳本中的錯誤所造成),則會記錄以下資訊:
%要求
收到所有 HTTP 要求標頭
POST 或 PUT 實體(如有)
%response
CGI 程式碼輸出的所有標頭
%stdout
CGI 標準輸出
%stderr
CGI 標準錯誤
(如果指令碼未在標準輸出或標準錯誤輸出任何內容,則 %stdout 和 %stderr 部分可能會遺失。)
說明 | 從 CGI 程式等待更多輸出的時間長度 |
---|---|
語法 | CGIScriptTimeout 時間[s|ms] |
預設值 | 未設定時 |
內容 | 伺服器設定、虛擬主機、目錄、.htaccess |
狀態 | 基礎 |
模組 | mod_cgi |
相容性 | 可用於版本 2.4.59 和後續版本。 |
此指令限制從 CGI 程式等待更多輸出的時間長度。如果超過時間,則會終止要求和 CGI。
CGIScriptTimeout 20
說明 | CGI 程式碼錯誤記錄檔的位置 |
---|---|
語法 | ScriptLog 檔案路徑 |
內容 | 伺服器設定、虛擬主機 |
狀態 | 基礎 |
模組 | mod_cgi 、mod_cgid |
「ScriptLog
」指令設定 CGI 程式碼錯誤記錄檔。如果未提供「ScriptLog
」,則不會建立錯誤記錄。如果提供了,任何 CGI 錯誤都會記錄在給定為引數的檔案名稱中。如果這是相對檔案或路徑,則基於「ServerRoot
」區分大小寫。
ScriptLog logs/cgi_log
此記錄將開啟為子行程執行所使用的使用者,即「User
」主要指令中指定的使用者。這表示存放程式碼記錄的目錄必須由該使用者寫入,或者必須手動建立檔案並設定為該使用者可寫入。如果您將程式記錄放在主記錄目錄中,請不要變更目錄權限,讓子行程執行的使用者可以寫入。
請注意,程式記錄用於編寫 CGI 程式碼的偵錯功能,並非用於持續啟用執行伺服器。針對速度或效率未最佳化,如果以非設計用途使用,可能會出現安全問題。