服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 5716|回复: 1

Linux下Apache+cgi的配置方法

[复制链接]
dirtysea 发表于 2010-11-25 11:51:53 | 显示全部楼层 |阅读模式
本文假定你已经安装好linux(本文的linux版本为Fedora Core3), 并具有root权限.

  1,安装apache
  首先到apache的主页下载最新版本的apache http server,地址为

  本文写于apache版本为2.2.0 .如果你也想用这一个版本的话请点击:

  安装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

  这时候在地址栏输入 看看是不是有成功的信息?(笔者看到的是 "It works!") 的信息, 当然不同的版本会不同,根据你 /htdocs 下的index.html内容而定.

  把/usr/local/apache2/htdocs/index.html 替换成你的页面文件就可以了.

  到了这里,我们假定你的apache服务器已经安装成功.如果还有问题请在网上搜索一下或者联系我:
  lonestep AT gmail D。T com

  2, 配置apache使之执行cgi程序(关闭SELinux)
  默认下,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的话,在地址栏

  输入 看看是否能够执行>?

  如果不能,请发邮件给我

  2),如果你想改变执行cgi的目录(不用默认的cgi-bin目录),则该变刚才的
  ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" 为:
  ScriptAlias /SomeOtherDirectory/ "/usr/local/apache2/cgi-bin/"

  然后重新启动apache.








要使Perl解释器在Apache服务器全局生效,必须对httpd.conf文件进行相应的配置。
  1.设置存放CGI文件的目录权限设置存放CGI文件的目录权限可以让Apache服务器允许CGI程序在哪些目录中运行,默认是在/var/www/cgi-bin路径下可以直接运行。如果主目录几任何目录需要执行CGI文件,可以在主目录权限设置的Options指令中添加一个"ExecCGI"选项,

<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks ExecCGI



如图16-14所示。
  
  2.标明CGI程序的文件类型找到"#AddHandler cgi-script.cgi"语句,删除前面的"#"即可,这样使得该语句告诉Apache扩展名为".cgi"的文件是CGI程序。如果同时想运行扩展名为。pl的文件,还可以在该语句后面添加".pl",如图16-15所示。
  


 楼主| dirtysea 发表于 2010-11-25 16:06:01 | 显示全部楼层
调试CGI程序,出现apache internet server error 500错误,第一感觉是权限问题,检测权限后,发现没有任何问题,权限是755,可以执行,
如下发现了更深入的问题。总结如下:

首先检查如下信息:
0.关闭SELinux
1 要保证自己的APACHE中有mod_cgi或mod_perl模块
2 apache配置文件中 AddHandler cgi-script .cgi 选项功能要打开。
3 CGI的文件要755的权限才可以运行
4 相对的PERL模块要存在
5.检查一下是不是用了BINARY方式上传,CGI程序一定要用ASCII方式上传。建议在所用的FTP软件里把.cgi,.pl都设定为使用ASCII方式,并且把连接选项里的上传方式设为AUTO.或者直接用VI写个新的文件,因为乱码也会造成执行不了出现“Premature end of script headers”的错误信息

若程序INDEX.CGI无法如期运行,可查看errlog。那个Premature end of script headers错误信息,
先不去管它,很多不明原因都会造成这个错误的,(apache的应对这个错误信息更加细化处理了)注意其

它的错误信息,若是:
1:directory is writable by others:dirname 说明相关的目录的权限太大了,应从777改为775.
2:file is writable by others: finename 说明该文件应改为不可写,如从666改为755
3:file has no execute permission: filename 说明该文件没法运行, 应改为755
4:No such file or directory: exec of  这个错误一般是文件格式造成的,我就是如此,可以通过
file filename.cgi查看文件系统的文件格式,如果格式有问题,或者文件有问题,就会给出提示。
以上总结希望能对新手在linux平台上设置CCB有所帮助。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-4-19 17:10 , Processed in 0.085941 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表