zoukankan      html  css  js  c++  java
  • apache安装扩展模块

    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

    这个时候有报错信息

    -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信息。

  • 相关阅读:
    HDU 1850 Being a Good Boy in Spring Festival
    UESTC 1080 空心矩阵
    HDU 2491 Priest John's Busiest Day
    UVALive 6181
    ZOJ 2674 Strange Limit
    UVA 12532 Interval Product
    UESTC 1237 质因子分解
    UESTC 1014 Shot
    xe5 android listbox的 TMetropolisUIListBoxItem
    xe5 android tts(Text To Speech)
  • 原文地址:https://www.cnblogs.com/lin1/p/5648589.html
Copyright © 2011-2022 走看看