您的位置:首页 > 运维架构 > Apache

Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

2014-06-13 10:44 525 查看
想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块。

附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25

此时,从 httpd.conf 文件中可看到如下模块被动态加载(没有cgi模块):

1
LoadModule
deflate_module modules/mod_deflate.so
2
LoadModule
expires_module modules/mod_expires.so
3
LoadModule
headers_module modules/mod_headers.so
4
LoadModule
ssl_module modules/mod_ssl.so
5
LoadModule
rewrite_module modules/mod_rewrite.so
6
LoadModule
php5_module modules/libphp5.so
查了下网络资料,发现Apache自带的apxs工具,可以在不重新编译Apache的前提下,给Apache添加模块。

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

操作如下:

添加的模块:

LoadModule cgi_modulelibexec/mod_cgi.so

LoadModule cgid_module libexec/mod_cgid.so

添加步骤:

如要额外安装cgi,先找到mod_cgi.c及mod_cgid.c。一般在apache安装包目录下,如 ./httpd-2.2.25/modules/generators 。

#编译安装 cgi模块

1
cd
/usr/
local
/src/Apache-2.2.25/httpd-2.2.25/modules/generators
2
/usr/
local
/apache/bin/apxs
-i -a -c mod_cgi.c
编译成功后会输出:

1
cd
/usr/
local
/src/Apache-2.2.25/httpd-2.2.25/modules/generators
2
/usr/
local
/apache/bin/apxs
-i -a -c mod_cgi.c
3
4
....
#省略掉了前部分内容
5
----------------------------------------------------------------------
6
chmod
755
/usr/
local
/apache/modules/mod_cgi.so
7
[activating
module `cgi'
in
/usr/
local
/apache/conf/httpd.conf]
#这行表示,在httpd.conf中已经加载了cgi
module
#编译安装 cgid模板

1
cd
/usr/
local
/src/Apache-2.2.25/httpd-2.2.25/modules/generators
2
/usr/
local
/apache/bin/apxs
-i -a -c mod_cgid.c
编译成功后会输出:

1
....
#省略掉了前部分内容
2
----------------------------------------------------------------------
3
chmod
755
/usr/
local
/apache/modules/mod_cgid.so
4
[activating
module `cgid'
in
/usr/
local
/apache/conf/httpd.conf]
#这行表示,在httpd.conf中已经加载了cgid
module
asps参数含义:

-i 表示需要执行安装操作。

-a 自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。

-n 增加或启用的模块名称。

# 再次查看下配置文件 httpd.conf:

1
LoadModule
deflate_module modules/mod_deflate.so
2
LoadModule
expires_module modules/mod_expires.so
3
LoadModule
headers_module modules/mod_headers.so
4
LoadModule
ssl_module modules/mod_ssl.so
5
LoadModule
rewrite_module modules/mod_rewrite.so
6
LoadModule
php5_modulemodules/libphp5.so
7
LoadModule
cgi_module modules/mod_cgi.so
8
LoadModule
cgid_modulemodules/mod_cgid.so
cgi与cgid模块被加载。

#重启下Apache

1
service
httpd restart
结果报如下错误:

1
[root@localhost
PHP-5.3.27]
#
service httpd restart
2
停止
httpd: [确定]
3
启动
httpd:httpd: Syntax error on line 61 of /usr/
local
/apache/conf/httpd.conf:
module cgi_module is built-
in
and
can't be loaded
4
[失败]
提示说:cgi_module 是内建模块,即无需手动加载,所以我们把“LoadModule cgi_module modules/mod_cgi.so”注释掉即可!

用命令 apachectl -l 去查看下哪些模块被内建了

01
[root@localhost
generators]
#
httpd -l
02
Compiled
in
modules:
03
core.c
04
mod_authn_file.c
05
mod_authn_default.c
06
mod_authz_host.c
07
mod_authz_groupfile.c
08
mod_authz_user.c
09
mod_authz_default.c
10
mod_auth_basic.c
11
mod_include.c
12
mod_filter.c
13
mod_log_config.c
14
mod_env.c
15
mod_setenvif.c
16
mod_version.c
17
prefork.c
18
http_core.c
19
mod_mime.c
20
mod_status.c
21
mod_autoindex.c
22
mod_asis.c
23
mod_cgi.c
24
mod_negotiation.c
25
mod_dir.c
26
mod_actions.c
27
mod_userdir.c
28
mod_alias.c
29
mod_so.c
30
[root@localhost
generators]
#
从上面可看出,mod_cgi.c 果然被内建了!

常见的安装报错及解决方案(以安装rewrite模块为例)

报错1:

Can`t loacte API module staructure `mod_rewrite_module` in file /usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module

解决方法:

httpd.conf 里面写的mod_rewrite_module改成rewrite_module。

报错2:

module rewrite_module is built-in and can't be loaded.

解决方法:

表示模块是内建的,不用再手动调入,注释掉 httpd.conf 中如下行:

#LoadModule rewrite_module modules/mod_rewrite.so

检查所有内建模块的命令: apachectl -l
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: