[Apache手冊]Linux環境下配置Apache運行cgi

CGI動態頁面html

 CGI(公共網關接口)定義了web服務器與外部內容生成程序之間交互的方法,一般是指CGI程序或者CGI腳本,它是在網站上實現動態頁面的最簡單和經常使用的方法。本文將對如何在Apache web服務器上創建CGI以及如何編寫CGI程序進行介紹。python

配置Apache以容許CGIlinux

要讓CGI程序能正常運做,必須配置Apache以容許CGI的執行,web

第一步:配置Apache(httpd.conf)加載cgi模塊,詳細參考 Apache不從新編譯,利用apxs工具給Apache添加模塊,如cgi模塊shell

第二步:配置Apache(httpd.conf)設置cgi目錄,以下方法之一:apache

方法一:ScriptAlias瀏覽器

ScriptAlias指令使Apache容許執行一個特定目錄中的CGI程序。當客戶端請求此特定目錄中的資源時,Apache假定其中全部的文件都是CGI程序並試圖運行它。安全

ScriptAlias指令形如:bash

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/服務器

完整配置參考以下:

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>

<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all  #千萬別忘了這個配置
</Directory>

若是Apache被安裝到默認位置,默認的配置文件httpd.conf中就會有上述配置。ScriptAliasAlias指令很是類似,都是定義了映射到一個特定目錄的URL前綴,二者通常都用於指定位於DocumentRoot之外的目錄,其不一樣之處是ScriptAlias又多了一層含義,即URL前綴後面的任何文件都被視爲CGI程序。因此,上述例子會指示Apache:任何以/cgi-bin/開頭的資源都將映射到/usr/local/apache2/cgi-bin/目錄中,且視之爲CGI程序。

例如,若是有URL爲http://www.example.com/cgi-bin/test.pl的請求,Apache會試圖執行/usr/local/apache2/cgi-bin/test.pl文件並返回其輸出。固然,這個文件必須存在並且可執行,並以特定的方法產生輸出,不然Apache返回一個出錯消息。

方法二:ScriptAlias目錄之外的CGI

因爲安全緣由,CGI程序一般被限制在ScriptAlias指定的目錄中,這樣,管理員就能夠嚴格控制誰可使用CGI程序。可是,若是採起了恰當的安全措施,則沒有理由不容許其餘目錄中的CGI程序運行。好比,你可能但願用戶在UserDir指定的宿主目錄中存放頁面,而他們有本身的CGI程序,但無權訪問cgi-bin目錄,這樣,就產生了運行其餘目錄中CGI程序的需求。

容許CGI在任意目錄執行須要兩個步驟:

#第一步:指定特定文件後綴爲CGI文件(即,告訴服務器哪些文件是CGI文件)。

有2種方法:方法一是定義MIME類型爲application/x-httpd-cgi,方法二是使用 AddHandler SetHandler 指令

例如,下面的AddHandler指令告訴服務器全部帶有cgi或pl後綴的文件是CGI程序。(添加到配置文件的最後面便可)

AddType application/x-httpd-cgi .cgi .pl #方法一
AddHandler cgi-script .cgi .pl #方法二

#第二步:設置CGI的目錄屬性,必須在Options指令中啓用ExecCGI選項。

能夠在主配置文件中,使用Options指令顯式地容許特定目錄中CGI的執行:

<Directory "/usr/local/apache2/cgi-bin">
	Options ExecCGI
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>

方法三:.htaccess文件

.htaccess指南示範了怎樣在沒有權限修改httpd.conf文件的狀況下激活CGI程序。

#用戶目錄

爲了容許用戶目錄中全部以".cgi"結尾的文件做爲CGI程序執行,你可使用如下配置:

<Directory /home/*/public_html>
    Options +ExecCGI
    AddHandler cgi-script .cgi
</Directory>

若是你想在用戶目錄中指定一個cgi-bin子目錄,其中全部的文件都被看成CGI程序,你能夠這樣配置:

<Directory /home/*/public_html/cgi-bin>
    Options ExecCGI
    SetHandler cgi-script
</Directory> 

#編寫CGI程序 

編寫CGI程序和"常規"程序之間有兩個主要的不一樣。

首先,在CGI程序的全部輸出前面必須有一個HTTP的MIME類型的頭,對客戶端指明所接收內容的類型,大多數狀況下,像這樣:

Content-type: text/html

其次,輸出要求是HTML形式的,或者是瀏覽器能夠顯示的其餘某種形式。多數狀況下,輸出是HTML形式的,但偶然也會輸出一個gif圖片或者其餘非HTML的內容。

除了這兩點,編寫CGI程序和編寫其餘程序大體相同。

#第一個CGI程序

這個CGI程序的例子在瀏覽器中打印一行文字。把下列存爲first.pl文件,並放在你的cgi-bin目錄中。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

即便不熟悉Perl語言,你也應該能看出它幹了什麼。第一行,告訴Apache這個文件能夠用/usr/bin/perl(或者任何你正在使用的shell)解釋並執行。第二行,打印上述要求的內容類型說明,並帶有兩個換行,在頭後面留出空行,以示HTTP頭的結束。第三行,打印文字"Hello, World."。程序到此結束。

打開你喜歡的瀏覽器並輸入地址:

http://www.example.com/cgi-bin/first.pl

或者是你存放程序的其餘位置,就能夠在瀏覽器窗口中看到一行:Hello, World. 。雖然並不怎麼激動人心,可是一旦這個程序能正常運行,那麼就可能運行其餘任何程序。

附:

(1)Shell腳本cgi程序

#!/bin/bash
echo "Content-type: text/html"
echo  # 注意,這行不能少
echo "Hello, Shell.cgi"

(2)Python腳本cgi程序

#!/usr/bin/python
print("Content-type: text/html\n") // 末尾的換行符不能少
print("Hello, Python.cgi")

(3)使用任何語言編寫均可以,只要程序能夠正常執行,Apache就能夠把輸出原封不動的發給瀏覽器。

 

 

更詳細、更深刻的教程,請看官方教程:http://lamp.linux.gov.cn/Apache/ApacheMenu/howto/cgi.html

相關文章
相關標籤/搜索