Apache 的通用閘道介面 (CGI) 可讓您配合程式、或通常稱為 CGI 程序檔的程序檔來建立動態內容。CGI 程序檔可以用任何程式設計語言來編寫。通常會使用類似 Perl 或 PHP 等程式檔設計語言。
若要啟用 Apache 來傳送 CGI 程序檔建立的內容,就必須啟動 mod_cgi 模組。這時也需要用到 mod_alias 模組。這兩種都是預設啟用的模組。如需啟動模組的詳細資訊,請參閱節 26.4.2, "啟用和停用"。
![]() | CGI 安全性 |
|---|---|
允許伺服器執行 CGI 程序檔會產生潛在的安全漏洞。如需更多資訊,請參閱節 26.7, "避免安全性問題"。 | |
在 SUSE Linux 中,CGI 程序檔只能在 /srv/www/cgi-bin/ 目錄中執行。這個位置已設定用來執行 CGI 程序檔。如果您已經建立虛擬主機組態 (請參閱節 26.2.1.2, "虛擬主機組態"),而且希望將程序檔放到主機特定目錄,您必須先為這個目錄解除鎖定並進行設定。
CGI 程式設計不同於「一般」程式設計;因為 CGI 程式和程序檔的最前面必須是 MIME-Type 標頭,例如 Content-type: text/html。這個標頭會傳送到用戶端,使其了解所接收內容的類型。其次,程序檔的輸出一定是用戶端 (通常是指網頁瀏覽器) 可了解的內容 -- 舉例來說,在多數情況下是指 HTML,或者是純文字或影像。
Apache 套件會在 /usr/share/doc/packages/apache2/test-cgi 提供簡單的測試程序檔。這個程序檔會以純文字方式輸出部分的環境變數內容。請將這段程序檔複製到 /srv/www/cgi-bin/ 或是虛擬主機的程序檔目錄 (/srv/www/example.com_cgi-bin/),並將其命名為 test.cgi。
可由網頁伺服器存取的檔案,應該屬於 root 使用者所有 (如需更多詳細資訊,請參閱節 26.7, "避免安全性問題")。因為網頁伺服器可由不同使用者身份執行,所以 CGI 程序檔必須具備可供全球執行和可供全球讀取等特性。變更 CGI 目錄和使用 chmod 755 test.cgi 指令,便可套用適當的許可權。
現在,請呼叫 http://localhost/cgi-bin/test.cgi 或 http://example.com/cgi-bin/test.cgi。這時應該會顯示 "CGI/1.0 測試程序檔報告"。
如果這時沒有顯示測試程式的輸出結果,而是出現錯誤訊息,請檢查下列項目:
CGI 疑難排解
您是否有在變更組態之後重新載入伺服器?請使用 rcapache2 probe 進行檢查。
您是否已正確設定自訂的 CGI 目錄 (若有的話)?如果您不確定,請在預設的 CGI 目錄 /srv/www/cgi-bin/ 中測試此程序檔,並使用 http://localhost/cgi-bin/test.cgi 進行呼叫。
檔案許可權是否正確?請切換至 CGI 目錄,並執行 ls -l test.cgi。此測試輸出開頭應該是
-rwxr-xr-x 1 root root
請確定程序檔沒有包含任何程式設計錯誤。如果您沒有變更 test.cgi 應該就不會出現錯誤,但是如果您是使用自己的程式,請務必確認這些程式沒有包含任何程式設計錯誤。