CGI教學:第4章 設置Web Server以運行CGI
發表時間:2024-05-16 來源:明輝站整理相關軟件相關文章人氣:
[摘要]一、NCSA Server二、CERN httpd三、Netscape Server四、IIS 一、設置NCSA Server或Apache Server以使用CGINCSA Server的CGI1.1只允許用下列兩種方式激活用戶服務器上的腳本:ScriptAlias指令和AddType指令。這兩...
一、NCSA Server
二、CERN httpd
三、Netscape Server
四、IIS
一、設置NCSA Server或Apache Server以使用CGI
NCSA Server的CGI1.1只允許用下列兩種方式激活用戶服務器上的腳本:ScriptAlias指令和AddType指令。這兩條指令都放在srm.conf文件中,該文件一般在用戶的服務器根目錄的conf目錄中。
ScriptAlias指令告訴服務器該目錄中的所有文件都是腳本或者是服務器作為CGI文件執行的程序。該方法能保證用戶的CGI程序在特定位置。AddType指令允許用戶告訴服務器任何具有指定前綴的文件都是可執行文件。如果希望將CGI程序放在服務器中任何地方的話該指令即很有用。
1、ScriptAlias指令
ScriptAlias指令位于Server Resource Map文件(srm.conf)中,程序內容例如下:
DocumentRoot /usr/local/etc/httpd/htdocs
UserDir public_html
REdirect /HTTPD/ http://www.server.com/
Alias /icons/ /usr/local/etc/httpd/icons/
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/
DirectoryIndex index.html index.shtml index.cgi
IndexOptions FancyIndexing
AddIcon /icons/movie.gif .mpg .qt
AddIcon /icons/menu.gif
AddIcon /icons/blank.xbm
DefaultIcon /icons/unknown.xbm
IndexIgnore */.??* *~ *# */HEADER* */README*
DefaultType text/plain
AccessFileName .htaccess
srm.conf文件允許用戶根據自己系統需要設置HTTP Server。它允許用戶告訴服務器用戶的主頁在什么地方,目錄中的哪個文檔是索引文檔,如果不存在索引文件的話將裝載什么圖片文件以顯示文件的類型,等等。srm.conf及其他配置文件的說明可查閱http://www.nease.net/tppmsgs/msgs0.htm#34。
2、AddType指令
AddType指令是執行CGI程序的另一種方式,它是在srm.conf文件中加入下列行:
AddType application/x-httpd-cgi.cgi
在自己的系統中設置了該指令后,任何在服務器控制范圍內的擴展名為.cgi的文件都會被作為CGI程序執行而不是作為文本文件閱讀。這意味著用戶可以在他的個人目錄中創建腳本并能執行它。但是如果腳本寫得不正確,就可能導致對文件系統、口令文件等的不同類型傷害。
AddType指令可以擴展為允許擴展名不是.cgi的程序同樣被執行。大家經常會看見以.pl(Perl腳本的常見擴展名)或.sh(Bourne Shell腳本的常見擴展名)結尾的腳本。如果想支持其他擴展名的程序,只需簡單地將它們加入AddType指令中,如下所示:
AddType application/x-httpd-cgi .cgi .pl .sh
3、訪問配置文件
為了支持CGI程序的執行必須多加入一條指令。在Server Root/conf目錄中是一個名為access.conf的配置文件。該文件允許用戶設置ServerRoot下的哪個目錄能夠訪問的全局限制,甚至允許用戶控制哪些站點可以訪問這些目錄。下面是access.conf文件的一個例子:
<Directory /usr/local/etc/httpd/cgi-bin>
Options INdexes Exec CGI
</Directory>
<Directory /usr/local/etc/httpd/htdocs>
Options Indexes FollowSymLinks
AllowOverride All
<Limit GET>
order allow,deny
allow from all
</Limit>
</Directory>
Exec CGI表示允許執行該目錄中的CGI腳本。Options Indexes FollowSymLinks表示允許索引(顯示某文件夾中的內容)并能夠遵循符號鏈(這就意味著在ServerRoot之外的文件也能被訪問)。AllowOverride指令允許用戶決定哪個指令可以被目錄的.htaccess文件覆蓋。中設置了對該目錄中允許使用GET方式的限制。在HTTPD中,部分指令的選項是GET、POST和PUT(目前PUT尚未實現)。order allow,deny一行告訴服務器先找allow行再找deny行。下一行則是告訴服務器允許所有站點訪問該目錄中的頁面。
二、設置CERN HTTP服務器以使用CGI
CERN HTTP服務器(也稱為W3C HTTP服務器)僅需要編輯/etc/httpd.conf文件即可支持在服務器內使用CGI程序。這個指令類似于NCSA Server使用的指令:
Exec /url-prefix/* /physical-path/*
其中/url-prefix/定義了客戶能看見的路徑,而/physical-path/則是包含腳本的目錄的實際路徑。
三、設置Netscape以使用CGI
首先要啟動管理服務器。以root身份登錄,并運行/ServerRoot/admserv/start-admin,缺省端口為81。然后啟動瀏覽器連接。在Netscape Admin頁面中,單擊Select URL Mapping,從彈出窗口中選擇Map a URL to a Local Directory。然后單擊Select CGI and Server Parsed HTML,從彈出窗口中選擇Activate CGI as a File Type,F在即可單擊Browse Files并選擇欲激活的目錄。選擇完目錄后,單擊I'd Like to Activate CGI as a File Type。在ServerRoot中即會看到Conf目錄中的obj.conf配置文件中已加入了下列行:
NameTrans form="/cgi-bin" fn="pfx2dir" dir="/usr/local/web/cgi-bin" name="cgi"
name=cgi調用了下列行:
<Object name="cgi">
ObjectType fn="force-type" type="magnus-internal/cgi"
Service fn="send-cgi"
</Object>
它告訴服務器此為一個CGI目錄,其中的所有文件都將用Netscape內部提供的CGI執行。 四、設置IIS以使用CGI
在IIS上運行CGI有十個簡單的步驟:
1)安裝Internet Service Manager。
2)從列表中選擇WWW Servive。
3)選擇Properties/Service Properties命令。
4)單擊Directories標簽。
5)單擊Add按鈕。
6)指定自己的cgi-bin目錄的完整路徑(例如,c:\webfiles\scripts)。
7)使用/scripts作為目錄別名。
8)選中Execute檢查框。
9)單擊OK保存修改。
10)將自己的CGI程序放在c:\webfiles\scripts中并在HTML中作為/scripts/someprogram.exe引用。
在使用IIS時經常出現的問題與設置IIS沒太大關系而是和基本的操作系統功能有很大關系。IIS與底層的操作系統聯系很緊密,即使已經設置為服務,Web服務器基本上是作為應用程序來運行的,通常只有一個用戶安全環境,Web服務器能訪問到的與Web服務器下的CGI程序能訪問到的內容幾乎沒什么不同(這類似于UNIX環境,在UNIX環境下,很重要的一點就是不要將Web服務器作為root來運行)。IIS的工作很像一個擴展的文件系統。每個用戶有自己的權限。CGI程序在執行該程序的訪問者的用戶安全環境中運行。對于未驗證的頁面,這就是缺省提供的“無名的”用戶,而對驗證的頁面,安全環境就像用戶位于服務器控制臺前手工運行該程序一樣。使大部分初學者犯錯誤的正是這種額外的安全層次。
IIS管理員最常抱怨的一個錯誤信息是"The Application misbehaved by not returning a complete set of headers"。錯誤消息接下來列出服務器接收到的頭標--一般是個空的清單。這種討厭的不明確的錯誤有一個直接的原因,不過這個原因與CGI腳本的錯誤操作沒有一點關系。如果因為某種原因某個CGI腳本不能運行,它就不能產生任何頭標。IIS將錯誤的責任推在腳本身上,實際上卻幾乎總是服務器管理員的錯。CGI腳本需要訪問系統DLLs、系統的臨時目錄以及它們使用的任何其他資源。如果該腳本是按靜態約束進行編譯的,那么除非所有組件均可用,否則操作系統不會裝載該程序的。如果系統管理員鎖緊了安全級使得腳本不能裝載它的DLLs,那么腳本就不能運行。當腳本不能運行時,它也就不產生任何頭標了(或者其他的輸入),從而導致出現本段開頭引用的錯誤消息。
如果管理員是在一個安全目錄中運行腳本的(安全目錄即是一個需要單獨用戶驗證才能訪問的目錄),那么每個可能訪問系統的用戶都必須有下列安全權限。如果是無名地運行腳本,那么只有無名用戶需要這些權限:
.對%systemroot%system(一般為c:\winnt\system)的讀權限
.對%systemroot%system32(一般為c:\winnt\system32)的讀權限
.對臨時目錄(一般為c:\temp)的修改權限
.對Web根的讀權限
.對CGI目錄的修改權限
如果在有了這些訪問權限之后仍然出問題,可以進一步臨時給特殊的用戶帳號Everyone賦予這些目錄的修改權限。如果問題解決了,就可以認定是少了一個步驟(或一個用戶)。糾正問題然后慢慢回收權限直至服務器重新安全。