zoukankan      html  css  js  c++  java
  • Apache模块开发

    Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)

    有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,
    下面贴出一个很简单的apache module,大家一起分析一下。
         $ cd /usr/local/apache2.2.4
         $ vi mod_c.c
    #include "apr.h"
    #include "apr_lib.h"
    #include "apr_strings.h"
    #define APR_WANT_STRFUNC
    #include "apr_want.h"
    #include "httpd.h"
    #include "http_config.h"
    #include "http_core.h"
    #include "http_request.h"
    
    module AP_MODULE_DECLARE_DATA c_module;
    
    static int c_handler(request_rec *r)
    {
            r->content_type="text/plain";
            ap_rprintf(r,"handler:%s
    ",r->handler);
            ap_rprintf(r,"query string:%s
    ",r->args);
            ap_rprintf(r,"filename:%s
    ",r->filename);
            return OK;
    }
    static void register_hooks(apr_pool_t *p)
    {
            ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
    }
    
    /* module structure */
    AP_MODULE_DECLARE_DATA module c_module = {
         STANDARD20_MODULE_STUFF,
         NULL,       /* dir config creater */
         NULL,                        /* dir merger — default is to override */
         NULL,       /* server config */
         NULL,                        /* merge server configs */
         NULL,       /* command apr_table_t */
         register_hooks     /* register hooks */
    };

    编译并安装这个模块(apache提供的apxs非常好):
          $ ./bin/apxs -c ./mod_c.c
          $ ./bin/apxs -a -i -n c mod_c.la
          这时apxs会自动帮我们把编译好的mod_c.so安装到modules/目录中,而且httpd.conf中已经把这个module load进去了:
          [root@cn-weblog apache2.2.4]# grep mod_c conf/httpd.conf     
           LoadModule c_module            modules/mod_c.so
        
          测试这个模块:
          $ ./bin/apachectl stop
          $ ./bin/apachectl start

          在IE中访问http://myhostname/index.html query=yy
          IE中会出现:
    handler:text/html
    query string:query=yy
    filename:/usr/local/apache2.2.4/htdocs/index.html
          说明该module运行成功。
        
          把上面的module简单解释一下。
        
          所有的apache module都必须是这个结构体,里面要定义各个内容。
    /* module structure */
    module AP_MODULE_DECLARE_DATA c_module = {
         STANDARD20_MODULE_STUFF,
         NULL,       /* dir config creater */
         NULL,                        /* dir merger — default is to override */
         NULL,       /* server config */
         NULL,                        /* merge server configs */
         //上面4项都是定义httpd.conf中命令的作用的
         NULL,       /* command apr_table_t */ //定义在httpd.conf中添加的命令,和各命令的处理函数
         register_hooks     /* register hooks */       //hooks,定义什么时候执行我们这个module的相关函数
    };

         ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
         表示在处理内容请求时调用我们函数–c_handler

  • 相关阅读:
    1.IntelliJ IDEA搭建SpringBoot的小Demo
    etc目录名字的意思---挖Linux中的古老缩略语
    CI当开启URL重写的时候,报错500 Internal Server Error
    app后端架构设计(转)
    Redis安装及主从配置
    ***Linux文件夹文件创建、删除、改名
    Redis中常用命令
    linux上ln链接命令详细说明
    Redis快速入门:安装、配置和操作
    redis的PHP扩展包安装方法
  • 原文地址:https://www.cnblogs.com/wzf365/p/3745797.html
Copyright © 2011-2022 走看看