导航
导航
文章目录
  1. 一、基础知识
    1. 1.1、什么是 CGI?
    2. 1.2、什么是 Apache PMA
    3. 1.3、mod_cgi 和 mod_cgid 区别
  2. 二、执行 CGI 的方法
    1. 2.1、指定ScriptAlias目录为CGI文件目录
    2. 2.2、指定特定文件后缀为CGI文件

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

为什么买的虚拟主机的 “public_html” 目录下总有那么一个空 “cgi-bin” 目录?再者为什么我将 cgi 文件不放刚才那个”cgi-bin” 目录下也同样也能运行?什么时候需要用到 AddType 指令

一、基础知识

1.1、什么是 CGI?

简单说 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_cgiApache 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> 
支持一下
扫一扫,支持一下