apache 安装扩展模块

1,首先要确认你是否加载了mod_so模块,这个就是你在编译前参数配置的时候添加-enable-so(启用DSO)。如果你没有这模块的话,是无法安装扩展模块的。

/usr/local/apache2/bin/apachectl -l  在列出来的内容如果有mod_so,则说明已经添加了加载该模块了。

 

2,安装扩展模块用到的工具就是apxs, 以安装mod_status.so这个模块为例。

 

3,cd到apache源码中,找到对应的C文件。

cd /usr/local/src/httpd-2.2.31/modules/generators/

这里我们可以看到mod_status.c这个就是我们需要的文件。

4,编译这个模块

 /usr/local/apache2/bin/apxs  -i -a  -c  mod_status.c

-c  编译的意思; - i  安装的意思; -a  在配置文件中自动添加IfModule信息。

这个时候有报错信息

-bash: /usr/local/apache2/bin/apxs: /replace/with/path/to/perl/interpreter: bad interpreter: 没有那个文件或目录(错误的解释器)

soga  apxs是一个perl的脚本,我们系统又没有安装perl解释器,所以yum install -y perl并且vi /usr/local/apache2/bin/apxs 将第一行改为perl解释器的路径,即#!/usr/bin/perl即可。

这个时候在编译

/usr/local/apache2/bin/apxs -i -a -c mod_status.c

/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -c -o mod_status.lo mod_status.c && touch mod_status.slo

/usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_status.la -rpath /usr/local/apache2/modules -module -avoid-version mod_status.lo

/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' mod_status.la /usr/local/apache2/modules

/usr/local/apache2/build/libtool --mode=install cp mod_status.la /usr/local/apache2/modules/

cp .libs/mod_status.so /usr/local/apache2/modules/mod_status.so

cp .libs/mod_status.lai /usr/local/apache2/modules/mod_status.la

cp .libs/mod_status.a /usr/local/apache2/modules/mod_status.a

chmod 644 /usr/local/apache2/modules/mod_status.a

ranlib /usr/local/apache2/modules/mod_status.a

PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules

----------------------------------------------------------------------

Libraries have been installed in:

/usr/local/apache2/modules

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR'

flag during linking and do at least one of the following:

- add LIBDIR to the `LD_LIBRARY_PATH' environment variable

during execution

- add LIBDIR to the `LD_RUN_PATH' environment variable

during linking

- use the `-Wl,--rpath -Wl,LIBDIR' linker flag

- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

chmod 755 /usr/local/apache2/modules/mod_status.so

可以看到,已经在modules目录下生成了mod_status.so这个模块了。

5,查看模块是否加载成功。

/usr/local/apache2/bin/apachectl -M 

发现报错信息:

httpd: Syntax error on line 58 of /usr/local/apache2/conf/httpd.conf: module status_module is built-in and can't be loaded 

查询资料,

原来我们原先就已经静态编译加载过mod_status.so这个模块,所以我们还是在httpd.con将这个配置注释掉吧。

 

二,介于上述找的模块并不是很好,所以决定重新安装另外一个apache扩展模块,以mod_proxy模块为例吧。

1,cd 到源码包中 

cd /usr/local/src/httpd-2.2.31/modules

cd proxy

可以看到mod_proxy.c这个文件

 

2,编译安装

/usr/local/apache2/bin/apxs -i -c -a mod_proxy.c

/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -c -o mod_proxy.lo mod_proxy.c && touch mod_proxy.slo

/usr/local/apache2/build/libtool --silent --mode=link gcc -o mod_proxy.la -rpath /usr/local/apache2/modules -module -avoid-version mod_proxy.lo

/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool' mod_proxy.la /usr/local/apache2/modules

/usr/local/apache2/build/libtool --mode=install cp mod_proxy.la /usr/local/apache2/modules/

cp .libs/mod_proxy.so /usr/local/apache2/modules/mod_proxy.so

cp .libs/mod_proxy.lai /usr/local/apache2/modules/mod_proxy.la

cp .libs/mod_proxy.a /usr/local/apache2/modules/mod_proxy.a

chmod 644 /usr/local/apache2/modules/mod_proxy.a

ranlib /usr/local/apache2/modules/mod_proxy.a

PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules

----------------------------------------------------------------------

Libraries have been installed in:

/usr/local/apache2/modules

If you ever happen to want to link against installed libraries

in a given directory, LIBDIR, you must either use libtool, and

specify the full pathname of the library, or use the `-LLIBDIR'

flag during linking and do at least one of the following:

- add LIBDIR to the `LD_LIBRARY_PATH' environment variable

during execution

- add LIBDIR to the `LD_RUN_PATH' environment variable

during linking

- use the `-Wl,--rpath -Wl,LIBDIR' linker flag

- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for

more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

chmod 755 /usr/local/apache2/modules/mod_proxy.so

[activating module `proxy' in /usr/local/apache2/conf/httpd.conf]

可以看到模块已经安装成功。

3,查看是否可以成功加载

/usr/local/apache2/bin/apachectl -M

httpd: Syntax error on line 59 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_proxy.so into server: /usr/local/apache2/modules/mod_proxy.so: undefined symbol: ap_proxy_lb_workers

怎么又报错,我也是醉了。。。。。

原来这个proxy模块是需要2个文件编译而成的。

重新编译

/usr/local/apache2/bin/apxs -i -c -a mod_proxy.c  proxy_util.c

可以看到成功了,不对,我们还是看能否真正的加载吧。

/usr/local/apach2/bin/apachectl -M

 

 终于看到了这个模块的存在,这说明扩展安装成功了。

 

 最后说明一下:/usr/local/apache2/bin/apxs - i -c -a 的中参数的意思。

-c  编译的意思

- i  安装的意思

-a  在配置文件中自动添加IfModule信息。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值