Apache 中的提交了一種利用擴展應用程序執行動態網頁的機制. 稱爲Common Gateway Interface (通用網關接口)簡稱CGI.html
本文假定已安裝好linux(本文的linux版本爲Fedora Core3), 並具備root權限.
1,安裝apache服務
首先到apache的主頁下載最新版本的apache http server,地址爲 http://httpd.apache.org/
本文寫於2006.4.29,apache版本爲2.2.0 .若是你也想用這一個版本的話請點擊:http://mirror.vmmatrix.net/apache/httpd/httpd-2.2.0.tar.gz
安裝apache:
切換到httpd-2.2.0.tar.gz所在目錄,而後:
# tar xvzf httpd-2.2.0.tar.gz
此時在該目錄下有一個文件夾 httpd-2.2.0,切換到該文件夾:
# cd ./httpd-2.2.0
想把apache安裝到哪一個文件夾,假定想安裝到 /usr/local/apache2/ 下面,則
輸入下面的命令:
# ./configure --prefix= /usr/local/apache2
# make
# make install
執行完這3條命令以後,apache就安裝到你的 /usr/local/apache2目錄下了.
切換到該目錄看看有什麼咚咚吧;)
# cd ./usr/local/apache2
# ls
能夠看到裏面有 /bin ,/conf , /htdocs, /cgi-bin 等目錄.此時apache尚未啓動,咱們經過/bin目錄下的工具apachectl來啓動,首先切換到/bin目錄:
# cd ./bin
而後啓動:
# ./apachectl start
這時候在地址欄輸入 http://localhost/ 看看是否是有成功的信息?(筆者看到的是 "It works!") 的信息, 固然不一樣的版本會不一樣,根據你 /htdocs 下的index.html內容而定.
把/usr/local/apache2/htdocs/index.html 替換成你的頁面文件就能夠了.
到了這裏,咱們假定你的apache服務器已經安裝成功.若是還有問題請在網上搜索一下或者聯繫我:
lonestep AT gmail D。T com
2, 配置apache使之執行cgi程序
默認下,cgi程序必須放在cgi-bin目錄下,咱們先來配置使得cgi-bin下的cgi程序能獲得正確執行,
後面將會介紹怎麼讓apache執行放在別的目錄下的cgi程序.
1),承上,咱們已經把apache安裝到 /usr/local/apache2 目錄下,切換到/usr/local/apache2/conf 目錄,裏面有一個 httpd.conf 文件, 編輯這個文件:
# cd /usr/local/apache2/conf
# vi httpd.conf (假定你的文本編輯器是vi, 若是你用別的編輯器如emacs, gedit, kedit 之類,把vi 替換成它們的命令便可)
尋找其中一行如:
# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
把這行前面前面的'#'去掉,而後從新啓動apache :
# cd ./bin (or cd /usr/local/apache2/bin)
# ./apachectl restart
ok, 假如你放了一個cgi程序'test.cgi'到cgi-bin的話,在地址欄
輸入 http://localhost/cgi-bin/test.cgi 看看是否可以執行>?
若是不能,請發郵件給我:) www.jbxue.com
2),若是你想改變執行cgi的目錄(不用默認的cgi-bin目錄),則該變剛纔的
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" 爲:
ScriptAlias /SomeOtherDirectory/ "/usr/local/apache2/cgi-bin/"
而後從新啓動apache.
以上的過程都是比較簡單的,若是您遇到了本文不曾涉及的問題,或者與本文假設不一樣的條件,
請先到Internet上查找解決辦法,若是還不行(once and once again)能夠發郵件給我:)
一. CGI 的配置過程 linux
1.CGI執行目錄設置. 通常在 /usr/local/apache/cgi-bin/文件夾中. 在httpd.conf配置文件中能找到相關信息. 例如我把的CGI 程序是test.pl 那麼地應的HTTP請法地址就是:http://localhost/cgi-bin/test.pl web
2.CGI 的執行目錄出於全安考慮通常只給讀權限.對應的httpd.conf 中的配置可執行CGI的地方以下: apache
<Directory /usr/local/apache/htdocs/somedir>
Options +ExecCGI
</Directory> 服務器
3.htaccess文件
阿.htaccess文件是一種方法,一套配置指令對每一個目錄的基礎。 當Apache服務的資源,它看起來在目錄中由它提供的文件的文件要求.htaccess ,若是它認爲有,它將適用於指示發現的。 .htaccess文件能夠被容許的AllowOverride指令,其中具體規定哪些類型的指令能夠出如今這些文件,或者,若是他們也不容許的。 容許指令,咱們將須要爲此目的,下面的配置將須要在您的主服務器配置. dom
二, 配置文件的內容和參數意思 編輯器
在配置目錄中有三個文件,分別是:
1. conf/httpd.conf :
ServerType :有兩個值可供選擇standalone 和inetd
Standalone : 表示你的httpd進程,是以一個單獨的守護進程(daemon)的方式 在後臺偵聽是否有客戶端的請求。
Inetd :表示你的httpd進程不是以守護進程(daemon)的方式運行,而是由Inetd 這個 internet services的進程偵聽,一旦有客戶的請求,他會自動的啓動httpd這個進程來提供相應的服務 默認的是Standalone方式,若是你不是對 ARPA Berkeley Services 不是很瞭解的 話,不要更改。
Port : 你分配給你的WEB SERVER 的端口號。
Httpd 的默認端口是80,也能夠分配給本身的WEB SERVER 一個大於1024 的
端口號。若是你這樣做,你必須在你的URL後面跟上你的端口號才能訪問到你
的頁面。好比你分配給你的服務的端口號是8888,那麼你訪問時須要輸入
http://domainname:8888
ServerAdmin :服務管理員的email 地址,默認的是本機的root用戶,因此是
root@localhost
ServerRoot :用來存放服務的配置、出錯和記錄文件的目錄。
BindAddress :虛擬主機的IP地址。用一臺機子虛擬多臺機子。
ErrorLog :用來存放你WEB SERVER的出錯信息的文件。
TransferLog :用來存放記傳輸過的文件名的記錄文件。
PidFile :該指定的文件存放了httpd進程的進程號,用來中止WEB SERVER。
ScoreBoardFile :用來存放進程的信息。
ServerName :你機子的名稱,若是你有域名,填入你本機的域名。若是沒有,就
填入你的主機名或IP地址。
Timeout :傳輸或接收的延時。大於這個時間SERVER 會斷開這個連接。
KeepAlive :(on or off)是否容許一個連接同時發出多的請求。
KeepAliveTimeout :(default is 15)等待下一個請求的時間。
MaxClients :(default is 150)容許的最大客戶個數。
一般上面的參數的默認值是不用改的,可是若是你同時在一臺機子上開幾個WEB SERVER 時要注意。第一,你要給每個WEB SERVER 分配不一樣的port 號。第二,要分別指定他們的errorlog文件和pidfile文件。第三,不懂的參數不要隨意改動,即便改動也要一次改一個,並留有記錄以便恢復。 ide
2. /conf/access.conf :
主要是對目錄的功能和訪問的控制的設定。下面我針對默認的頁面的配置文件進行說明。該文件的位置是:/etc/httpd/conf/access.conf.
該文件的第一段非註釋部分以下:
<Directory /home>
Options Indexes IncludesNOEXEC
AllowOverride None
</Directory>
你們注意到這一部分是以<Directory /home>開頭,以</Directory>結束的。其中開頭的部分<Directory /home>表示下面的設定是針對 /home 目錄的。Options 這一命令有不少的參數,各參數的功能以下:
All 全部的選項除了MultiViews功能。
ExecCGI 開啓執行CGI程序的功能。
FollowSymLinks 開啓一個動態的連接,當有客戶訪問到該目錄時會自動
的連接到另外一個相關的目錄中去。
Includes 開啓服務端的引用功能。 www.jbxue.com
IncludesNOEXEC 開啓服務端的引用功能,可是#exec和CGI程序的引用將
被禁止。
Indexes 若是沒有index.html文件在目錄中,就會顯示文件列表。
SymLinksIfOwnerMatch 只有在連接的目標文件或目錄與當前的目錄屬於同一用
戶時,纔開啓連接。
接着是AllowOverride參數,該參數是設定訪問控制的。這裏把他設置成None,表示沒有開啓該功能。
第二部分是:
<Directory /home/httpd/html>
Options Indexes Includes ExecCGI FollowSymLink
AllowOverride None
order allow,deny
allow from all
</Directory>
第三部分是:
<Directory /home/httpd/cgi-bin>
AllowOverride None
Options ExecCGI
</Directory>
表示對/home/httpd/cgi-bin 不進行訪問控制,容許執行CGI程序。這就代表這是一個用來存放CGI程序的目錄 工具
3. /conf/srm.conf
主要是用來指定你的文檔的位置。
第一個參數是:DocumentRoot 。用來指定主文檔的地址。
第二個參數是:UserDir 。用來指定我的主頁的位置。若是你有一個用戶的home目錄爲 /home/jon 當在URL中輸入 http://yourdomain/~jon 系統就會到 /home/jon/X/中去取這個用戶的我的主頁。其中X爲UserDir 所指定的目錄。
第三個參數是:DirectoryIndex。用來聲明查找的索引文件的名稱。
其餘的不改也無防。一般用到的就是上面的幾個選項。 spa
具體示例
須要創建一個開機啓動的web server。假定你的文檔目錄爲/home/jon/html。
首先,更改/etc/httpd/conf/access.conf文件的內容。將原文檔的目錄更改成新的文檔目錄。
例如以下的更改:
複製代碼 代碼以下:
<Directory /home/httpd/html> ? <Directory /home/jon/html>
Options Indexes Includes ExecCGI FollowSymLink
AllowOverride None
order allow,deny
allow from all
</Directory>
<Directory /home/httpd/cgi-bin> ? <Directory /home/jon/cgi-bin>
AllowOverride None
Options ExecCGI
</Directory>
如上作相應的更改,注意 /home/jon/cgi-bin爲你的cgi程序的目錄。
接着,修改 /etc/httpd/conf/srm.conf文件。
將DocumentRoot /home/httpd/html 改成DocumentRoot /home/jon/html
最後,修改 /etc/httpd/conf/httpd.conf文件。
將ServerName 這一個參數後面的原來的內容替換爲你的本機ip地址或主機名,同時去掉前面的註釋符 「#」。這裏的配置爲:
ServerName jon (jon 爲個人主機名)
重新啓動httpd進程:
#/etc/rc.d/init.d/httpd restart
四. CGI 程序的編寫
首先,全部輸出從您的CGI程序以前,必須由一個MIME類型的標題 1. 首先要肯定Content-type: text/html