凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 752980
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-17 14:32
个人简介

小公司研发总监,既当司令也当兵!

文章分类

全部博文(144)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: linux

2016-03-23 12:08:06

配置apache以允许cgi


要让cgi程序能正常运作,必须配置apache以允许cgi的执行,其方法有多种:

scriptalias

scriptalias指令使apache允许执行一个特定目录中的cgi程序。当客户端请求此特定目录中的资源时,apache假定其中文件都是cgi程序并试图运行。
scriptalias指令形如:
scriptalias /cgi-bin/ /var/www/cgi-bin/
如果apache被安装到默认的位置,默认的配置文件httpd.conf中则会有上述配置。scriptalias指令定义了映射到一个特定目录的url前缀,与alias指令非常相似,两者一般都用于指定位于documentroot目录以外的目录,其区别是scriptalias又多了一层含义,即其url前缀中任何文件都被视为cgi程序。所以,上述例子会指示apache,/cgi-bin/应该指向/usr/local/apache/cgi-bin/目录,且视之为cgi程序。另外,该配置可能在httpd.conf中也可以直接配置在sites-available/default中,示例如下:

点击(此处)折叠或打开

  1. <virtualhost *:80>
  2.     serveradmin webmaster@localhost

  3.     documentroot /var/www
  4.     <directory />
  5.         options followsymlinks
  6.         allowoverride none
  7.     </directory>
  8.     <directory /var/www/>
  9.         options indexes followsymlinks multiviews
  10.         allowoverride none
  11.         order allow,deny
  12.         allow from all
  13.     </directory>

  14.     scriptalias /cgi-bin/ /var/www/cgi-bin/
  15.     <directory "/var/www/cgi-bin">
  16.         allowoverride none
  17.         options execcgi -multiviews symlinksifownermatch
  18.         order allow,deny
  19.         allow from all
  20.         addhandler cgi-script cgi
  21.     </directory>

  22.     errorlog ${apache_log_dir}/error.log

  23.     # possible values include: debug, info, notice, warn, error, crit,
  24.     # alert, emerg.
  25.     loglevel warn

  26.     customlog ${apache_log_dir}/access.log combined

  27.     alias /doc/ "/usr/share/doc/"
  28.     <directory "/usr/share/doc/">
  29.         options indexes multiviews followsymlinks
  30.         allowoverride none
  31.         order deny,allow
  32.         deny from all
  33.         allow from 127.0.0.0/255.0.0.0 ::1/128
  34.     </directory>

  35. </virtualhost>

举例,如果有url为的请求,apache会试图执行/var/www/cgi-bin/test.pl文件并返回其输出。当然,这个文件必须存在而且可执行,并以特定的方法产生输出,否则apache返回一个出错消息。

scriptalias目录以外的cgi

由于安全原因,cgi程序通常被限制在scriptalias指定的目录中,如此,管理员就可以严格地控制谁可以使用cgi程序。但是,如果采取了恰当的安全方法措施,则没有理由不允许其他目录中的cgi程序运行。比如,你可能希望用户在userdir指定的宿主目录中存放页面,而他们有自己的cgi程序,但无权存取cgi-bin目录,这样,就产生了运行其他目录中cgi程序的需求。
用options显式地允许cgi的执行
可以在主服务器配置文件中,使用options指令显式地允许特定目录中cgi的执行:
options execcgi 
上述指令使apache允许cgi文件的执行。另外,还必须告诉服务器哪些文件是cgi文件。下面的addhandler指令告诉服务器所有带有cgi或pl后缀的文件是cgi程序:
addhandler cgi-script .cgi .pl

应用举例:
1. 检查/var/www目录下是否存在cgi-bin目录,如果没有则创建之;
2. 在该目录下穿件一个demo.cgi的文件,内容为:

点击(此处)折叠或打开

  1. #!/bin/bash

  2. echo "server_software :: $server_software" >> /tmp/cgidebug
  3. echo "server_name:: $server_name" >> /tmp/cgidebug
  4. echo "gateway_interface:: $gateway_interface" >> /tmp/cgidebug
  5. echo "server_protocol:: $server_protocol" >> /tmp/cgidebug
  6. echo "server_port:: $server_port" >> /tmp/cgidebug
  7. echo "request_method:: $request_method" >> /tmp/cgidebug
  8. echo "path_info:: $path_info" >> /tmp/cgidebug
  9. echo "path_translated:: $path_translated" >> /tmp/cgidebug
  10. echo "script_name:: $script_name" >> /tmp/cgidebug
  11. echo "query_string:: $query_string" >> /tmp/cgidebug
  12. echo "remote_host:: $remote_host" >> /tmp/cgidebug
  13. echo "remote_addr:: $remote_addr" >> /tmp/cgidebug
  14. echo "auth_type:: $auth_type" >> /tmp/cgidebug
  15. echo "remote_user:: $remote_user" >> /tmp/cgidebug
  16. echo "remote_ident:: $remote_ident" >> /tmp/cgidebug
  17. echo -e "************************$(date) ***********************\r\n" >> /tmp/cgidebug

  18. content_type="text/html"

  19. echo -e "content-type: $content_type\r\n\r\n"
  20. echo -e "\n"

  21. echo -e " cgi testing \n"
  22. echo -e "

    cgi 入门 -凯发app官方网站

    \n"

  23. echo -e "\n"
3.  给demo.cgi文件附上可执行权限;
4. 浏览器访问 http://[your-ip]/cgi-bin/demo.cgi 则可以显示“hello cgi!”的页面,同时可以在/tmp/cgidebug文件中记录了cgi的变量和值。

阅读(3806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图