一、基础知识
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