Username: Password:

CGI教学:第四章配置WebServer以运行CGI
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  一、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文档的一个例子:

  

  Options INdexes Exec CGI

  


  

  Options Indexes FollowSymLinks

  AllowOverride All

  

  order allow,deny

  allow from all

  


  


  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。现在即可单击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调用了下列行:

  

  ObjectType fn="force-type" type="magnus-internal/cgi"

  Service fn="send-cgi"

  


  他告诉服务器此为一个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赋予这些目录的修改权限。假如问题解决了,就能够认定是少了一个步骤(或一个用户)。纠正问题然后慢慢回收权限直至服务器重新安全。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅