第四章 設置Web Server以運行CGI ■【 NCSA Server 】 |
| 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 srm.conf文件允許用戶根據自己系統需要設置HTTP Server。它允許用戶告訴服務器用戶的主頁在什麼地方,目錄中的哪個文檔是索引文檔,如果不存在索引文件的話將裝載什麼圖片文件以顯示文件的類型,等等。srm.conf及其他配置文件的說明可查閱http://hoohoo.ncsa.uiuc.edu/docs/setup/Configure.html。 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> Exec CGI表示允許執行該目錄中的CGI腳本。Options Indexes FollowSymLinks表示允許索引(顯示某文件夾中的內容)並能夠遵循符號鏈(這就意味著在ServerRoot之外的文件也能被訪問)。AllowOverride指令允許用戶決定哪個指令可以被目錄的.htaccess文件覆蓋。 |
■【 CERN httpd 】 |
| CERN HTTP服務器(也稱為W3C HTTP服務器)僅需要編輯/etc/httpd.conf文件即可支持在服務器內使用CGI程序。這個指令類似於NCSA Server使用的指令︰ Exec /url-prefix/* /physical-path/* 其中/url-prefix/定義了客戶能看見的路徑,而/physical-path/則是包含腳本的目錄的實際路徑。 |
■【 Netscape Server 】 |
| 首先要啟動管理服務器。以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。現在即可單擊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"> 它告訴服務器此為一個CGI目錄,其中的所有文件都將用Netscape內部提供的CGI執行。 |
■【 IIS 】 |
在IIS上運行CGI有十個簡單的步驟︰ 1)安裝Internet Service Manager。 在使用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)的讀權限 如果在有了這些訪問權限之后仍然出問題,可以進一步臨時給特殊的用戶帳號Everyone賦予這些目錄的修改權限。如果問題解決了,就可以認定是少了一個步驟(或一個用戶)。糾正問題然后慢慢回收權限直至服務器重新安全。 |
![]() CopyRight © 2001蜀 漢 皇 朝All Rights Reserved |