Linux下Apache+cgi的配置方法
本文假定你已经安装好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所示。
http://book.chinaitlab.com/UploadFiles_8223/200903/2009030316515398.jpg
2.标明CGI程序的文件类型找到"#AddHandler cgi-script.cgi"语句,删除前面的"#"即可,这样使得该语句告诉Apache扩展名为".cgi"的文件是CGI程序。如果同时想运行扩展名为。pl的文件,还可以在该语句后面添加".pl",如图16-15所示。
http://book.chinaitlab.com/UploadFiles_8223/200903/2009030316524984.jpg
调试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有所帮助。
页:
[1]