Pages

Monday, 28 November 2011

Apache2.2内置的CGI模块的使用方法

一、基础知识
1.1、什么是 CGI?

见前文《Linux 从源码编译安装 PHP 5.3.4》,简单说 CGI 是一种口,所有对 CGI 文件的访问请求,Web 服务器必须先作执行处理而不能直接把内容返回浏览器。
1.2、什么是 Apache PMA

Apache PMA,即多路处理模块,详细介绍见 ,apache2.2 官方文档

apache2.2 默认使用 prefork ,如果需要选择 worker ,那么必须在apache2.2 编译时使用“--with-mpm=” 选项静态编译进核心。可通过"httpd -l"查询当前的PMA模式。

prefork 采用进程的方式,Worker 采用进程与线程混合方式,海量的请求时,prefork 较快但耗资源,worker 相反。
1.3、mod_cgi 和 mod_cgid 区别

Apache PMA 为 prefork 时使用mod_cgi模块,PMA 为worker 时使用mod_cgid模块。详细介绍见文档 Apache Module mod_cgi、Apache Module mod_cgid。即在用户层面,这两个模块本质上是相同的。
二、执行 CGI 的方法
2.1、指定ScriptAlias目录为CGI文件目录

在 ScriptAlias 目录的文件均被认为是 CGI i脚本,另外要设置该目录属性,但无需添加 ExecCGI 选项。

指定目录别名及路径,注意是“ScriptAlias”而不是“Alias”
ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

设置该目录属性,绝对路径,千万不要漏了 "Allow from all" 切记!
<Directory "/usr/local/apache/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

2.2、指定特定文件后缀为CGI文件

在 ScriptAlias 目录的文件均被认为是 CGI i脚本,那么目录之外是否可以?可以!但要指定后缀、设置目录属性,且启用ExecCGI选项。

指定后缀有两种方法,一是定义MIME类型为application/x-httpd-cgi,二是使用 AddHandler 或 SetHandler 指令激活内置的 cgi-script 处理器:
AddType application/x-httpd-cgi .cgi #方法一
AddHandler cgi-script .cgi #方法二

设置CGI的目录属性,必须在Options指令中启用ExecCGI选项:
<Directory "/usr/local/apache/htdocs/cgi-bin">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

No comments:

Post a Comment