apache动态编译cgi模块

描述:

1、搭建qmailadmin过程中,要求服务支持cgi请求。

2、之前编译apache时,cgi模块没有编译进来。

3、要么重新编译apache,要么利用apxs工具编译cgi模块。两者比较,当然是选择编译模块。

操作步骤如下:

查了下网络资料,发现Apache自带的apxs工具,可以在不重新编译Apache的前提下,给Apache添加模块。

Apache运行cgi程序需要用到2个模块:mod_cgi.so 与 mod_cgid.so

操作如下:
1、查看apache是否安装mod_cgi模块
[root@chen-123 cgi-bin]# apachectl -l|grep cgi
mod_proxy_scgi.c
未发现mod_cgi.c,说明apache默认没安装cgi模块
2、添加步骤
1)、先找到mod_cgi.c及mod_cgid.c。一般在apache安装包目录下,如:/root/godaddy/html/centos/httpd-2.2.25/modules/generators
2)、编译安装cgi模块
[root@chen-123 generators]#cd /root/godaddy/html/centos/httpd-2.2.25/modules/generators
[root@chen-123 generators]#/opt/phpdba/httpd-2.2.25/bin/apxs -i -a -c mod_cgi.c
编译成功后会输出:

…. #省略掉了前部分内容
———————————————————————-
chmod 755 /opt/phpdba/httpd-2.2.25/modules/mod_cgi.so
[activating module `cgi' in /opt/phpdba/httpd-2.2.25/conf/httpd.conf] #这行表示,在httpd.conf中已经加载了cgi module

[root@chen-123 generators]# vim /opt/phpdba/httpd-2.2.25/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
LoadModule cgi_module modules/mod_cgi.so #配置文件已经添加
[root@chen-123 generators]# ll /opt/phpdba/httpd-2.2.25/modules/
总用量 31252
-rw-r–r– 1 root root 9201 7月 22 17:39 httpd.exp
-rwxr-xr-x 1 root root 31913793 7月 22 17:47 libphp5.so
-rwxr-xr-x 1 root root 73503 7月 27 12:08 mod_cgi.so

#编译安装 cgid模板
[root@chen-123 generators]# /opt/phpdba/httpd-2.2.25/bin/apxs -i -a -c mod_cgid.c
编译成功后会输出:
…. #省略掉了前部分内容
———————————————————————-
chmod 755 /opt/phpdba/httpd-2.2.25/modules/mod_cgid.so
[activating module `cgid' in /opt/phpdba/httpd-2.2.25/conf/httpd.conf]#这行表示,在httpd.conf中已经加载了cgid module
[root@chen-123 generators]# vim /opt/phpdba/httpd-2.2.25/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule cgid_module modules/mod_cgid.so
[root@chen-123 generators]# ll /opt/phpdba/httpd-2.2.25/modules/
总用量 31344
-rw-r–r– 1 root root 9201 7月 22 17:39 httpd.exp
-rwxr-xr-x 1 root root 31913793 7月 22 17:47 libphp5.so
-rwxr-xr-x 1 root root 92334 7月 27 12:11 mod_cgid.so
-rwxr-xr-x 1 root root 73503 7月 27 12:08 mod_cgi.so

3)、apxs参数含义:
-i 表示需要执行安装操作。
-a 自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
-n 增加或启用的模块名称。
3、验证cgi模块安装是否成功
1)查看apache模块列表
[root@chen-123 generators]# apachectl -M|grep cgi
proxy_scgi_module (static)
cgi_module (shared)
cgid_module (shared)
2)、重启apache、访问cgi脚本
[root@chen-123 generators]# apachectl restart
结果报如下错误:
停止 httpd: [确定]
启动 httpd:httpd: Syntax error on line 61 of /opt/phpdba/httpd-2.2.25/conf/httpd.conf: module cgi_module is built-in and can’t be loaded [失败]
提示说:cgi_module 是内建模块,即无需手动加载,所以我们把“LoadModule cgi_module modules/mod_cgi.so”注释掉即可!
* 用命令 apachectl -l 去查看下哪些模块被内建了,及安装时编译了cgi模块。

3)、浏览器访问http://chen-123.phpdba.com/cgi-bin/test.cgi

CGI/1.0 test script report:

argc is 0. argv is .

SERVER_SOFTWARE = XXXX
SERVER_NAME = chen-123.phpdba.com
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH_INFO =
PATH_TRANSLATED =
SCRIPT_NAME = /cgi-bin/test.cgi
QUERY_STRING =
REMOTE_HOST =
REMOTE_ADDR = 11*.*.***.239
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

cgi模块安装好了,继续qmailadmin 。