zoukankan      html  css  js  c++  java
  • Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

    想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块。

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

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

    LoadModule deflate_module modules/mod_deflate.so
    LoadModule expires_module modules/mod_expires.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule ssl_module modules/mod_ssl.so
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule php5_module modules/libphp5.so

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

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

    操作如下:

    添加的模块:

    LoadModule cgi_module      libexec/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模块

    cd /usr/local/src/Apache-2.2.25/httpd-2.2.25/modules/generators
    /usr/local/apache/bin/apxs -i -a -c mod_cgi.c

    编译成功后会输出:

    cd /usr/local/src/Apache-2.2.25/httpd-2.2.25/modules/generators
    /usr/local/apache/bin/apxs -i -a -c mod_cgi.c
    
    .... #省略掉了前部分内容
    ----------------------------------------------------------------------
    chmod 755 /usr/local/apache/modules/mod_cgi.so
    [activating module `cgi' in /usr/local/apache/conf/httpd.conf] #这行表示,在httpd.conf中已经加载了cgi module

    #编译安装 cgid模板

    cd /usr/local/src/Apache-2.2.25/httpd-2.2.25/modules/generators
    /usr/local/apache/bin/apxs -i -a -c mod_cgid.c

    编译成功后会输出:

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

    asps参数含义:

    -i 表示需要执行安装操作。
    -a 自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
    -n 增加或启用的模块名称。

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

    LoadModule deflate_module modules/mod_deflate.so
    LoadModule expires_module modules/mod_expires.so
    LoadModule headers_module modules/mod_headers.so
    LoadModule ssl_module modules/mod_ssl.so
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule php5_module        modules/libphp5.so
    LoadModule cgi_module         modules/mod_cgi.so
    LoadModule cgid_module        modules/mod_cgid.so

    cgi与cgid模块被加载。

    #重启下Apache

    service httpd restart

    结果报如下错误:

    [root@localhost PHP-5.3.27]# service httpd restart
    停止 httpd:                                               [确定]
    启动 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
                                                               [失败]

    提示说:cgi_module内建模块,即无需手动加载,所以我们把“LoadModule cgi_module         modules/mod_cgi.so”注释掉即可!

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

    [root@localhost generators]# httpd -l
    Compiled in modules:
      core.c
      mod_authn_file.c
      mod_authn_default.c
      mod_authz_host.c
      mod_authz_groupfile.c
      mod_authz_user.c
      mod_authz_default.c
      mod_auth_basic.c
      mod_include.c
      mod_filter.c
      mod_log_config.c
      mod_env.c
      mod_setenvif.c
      mod_version.c
      prefork.c
      http_core.c
      mod_mime.c
      mod_status.c
      mod_autoindex.c
      mod_asis.c
      mod_cgi.c
      mod_negotiation.c
      mod_dir.c
      mod_actions.c
      mod_userdir.c
      mod_alias.c
      mod_so.c
    [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

  • 相关阅读:
    jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解
    jQuery的三种$()方式
    基于DDD的.NET开发框架
    你得学会并且学得会的Socket编程基础知识
    C#委托及事件
    C#学习笔记:泛型委托Action<T>和Fun<TResult>
    JS 变量或参数是否有值的判断
    [转]剖析ASP.Net MVC Application
    python爬虫beautifulsoup4系列2【转载】
    python爬虫beautifulsoup4系列1【转载】
  • 原文地址:https://www.cnblogs.com/52php/p/5669833.html
Copyright © 2011-2022 走看看