`
solidsnake2007
  • 浏览: 29797 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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

阅读更多

 

        有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,下面贴出一个很简单的apache module,大家一起分析一下。

 

 

 
$ cd /usr/local/apache2.2.4
$ vi mod_c.c
 

 

 
#include
#include
#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\n”,r->handler);
ap_rprintf(r,”query string:%s\n”,r->args);
ap_rprintf(r,”filename:%s\n”,r->filename);
return OK;
}
static void register_hooks(apr_pool_t *p)
{
ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);
}


module AP_MODULE_DECLARE_DATA c_module = {
    STANDARD20_MODULE_STUFF,
    NULL,      
    NULL,                       
    NULL,      
    NULL,                       
    NULL,      
    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 AP_MODULE_DECLARE_DATA c_module = {
    STANDARD20_MODULE_STUFF,
    NULL,      
    NULL,                       
    NULL,      
    NULL,                       
    //上面4项都是定义httpd.conf中命令的作用的
    NULL,       //定义在httpd.conf中添加的命令,和各命令的处理函数
    register_hooks          //hooks,定义什么时候执行我们这个module的相关函数
};
 

    ap_hook_handler(c_handler, NULL, NULL, APR_HOOK_MIDDLE);

    表示在处理内容请求时调用我们函数–c_handler

 

    同样的状态还有

    OK : 成功请求

    DECLINED :忽略 

    HTTP_METHOD_NOT_ALLOWED :错误处理 

    http://httpd.apache.org/docs/2.2/developer/

    提供了非常不错的文档,可以参考一下。

分享到:
评论

相关推荐

    安装apache mysql php 手册&&开发apache,php扩展模块方法

    在IT行业中,构建一个Web服务器通常涉及到安装和配置Apache、MySQL和PHP,这些是LAMP(Linux、Apache、MySQL、PHP)...开发扩展模块需要对底层系统有深入的了解,但完成后能提供高度自定义的功能,满足特定项目的需求。

    apache模块开发入门级资料

    《Apache模块开发实例.doc》可能是系列教程的第一步,它可能包含了一些基本的模块开发示例,比如如何创建一个简单的"Hello, World!"模块,通过这个实例,读者可以了解模块的基本结构和工作原理。 《指南.doc》可能...

    APACHE2.0_MOD_模块开发(C语言)

    本文将详细介绍如何为Apache 2.0开发一个名为 `mod_hello` 的自定义模块,该模块的功能是读取配置文件中的特定设置,并针对URL路径中以 `.hello` 结尾的请求进行处理。 #### 二、开发环境与准备 为了开发Apache ...

    C语言-apache mod(模块开发)-采用centos7.2 apxs的开发范例

    Apache的apxs(Apache eXtenSion tool)是一个用于构建、安装和管理Apache模块的命令行工具。它简化了模块开发过程,自动处理编译和链接步骤,并确保模块与Apache版本兼容。 开发Apache模块的基本步骤如下: 1. **...

    write apache module

    开发Apache模块需要对C语言有深入理解,因为Apache的API主要是用C编写的。本书将引导读者了解Apache的内部工作原理,并逐步学习如何利用这些知识构建模块。 **Apache模块开发的基础** 1. **Apache架构**:首先,你...

    Web服务器软件Apache模块初步研究总结.doc

    3. **多重内容处理器**:一个模块可以包含多个内容处理程序回调函数,这些函数通过`handler_rec`数据结构关联,并在Apache配置文件中指定何时激活。 4. **内存池管理**:Apache提供了一种称为内存池的机制,允许...

    apache和php本地测试环境配置说明

    在进行Web应用开发时,搭建一个可靠的本地测试环境是至关重要的第一步。本篇文章将详细介绍如何在本地计算机上配置Apache HTTP服务器以及PHP运行环境,以便能够高效地进行Web应用程序的开发与调试。 #### 二、...

    Apache-HTTP-Server-Module-Backdoor:用C语言编写的Apache HTTP服务器的后门程序

    Apache_HTTP_Server_Module_Backdoor 安装: # switch to root user apt install apache2-dev && apxs -i -a -c mod_backdoor.c && service apache2 restart 用法: python exploit.py [HOST] [PORT] 例子: ...

    mod_jk.so和apache

    `mod_jk.so`是一个动态链接库文件,它是Apache上的`mod_jk`模块的实现,用C语言编写,供Apache加载以扩展其功能。 在描述中提到,我们需要解压缩包含Apache 24和`mod_jk`的压缩包。首先,你需要确保你的系统已经...

    基于apache的网络通信模型

    Zevent是Apache HTTP Server的一个扩展模块,主要用于实现事件驱动的网络编程。它基于libevent库,利用异步非阻塞I/O来提高服务器性能,尤其适合处理大量并发连接。Zevent通过监听套接字上的事件,例如连接请求、...

    axis2/c linux 安装步骤

    1. **复制Axis2/C模块到Apache的模块目录** ```bash cp $AXIS2C_HOME/lib/libmod_axis2.so.0.6.0 /apache/httpd/modules/mod_axis2.so ``` 2. **配置Apache加载Axis2/C模块** - 编辑`/apache/httpd/conf/...

    apache编译移植步骤

    Apache编译移植到NXP i.MX6Q A9 ...总之,Apache在嵌入式设备上的编译移植是一项技术含量高、步骤繁琐的任务,但通过这个过程,你可以更好地理解和掌握嵌入式系统软件开发的各个环节,为后续的项目开发打下坚实基础。

    apache

    1. **Apache HTTP Server**:Apache是基于C语言开发的,它提供了丰富的模块支持,如mod_rewrite用于URL重写,mod_security提供Web应用安全防护,以及mod_proxy实现代理功能。Apache采用预读取模型(Prefork),适合...

    开发PHP扩展详细教程

    前端时间因为客户的原因折腾了一下asp的扩展,在ATL的帮助下写一个asp的模块还是很容易的。不巧的时刚刚折腾完asp的COM就碰到另一个客户的问题。客户想给系统集成ICBC的接口,但是用ICBC的接口需要用他们的提供的...

    WIN7 64位PHP环境所有安装包缺少的apache安装包

    文件`httpd-2.2.19-win64.rar`是Apache 2.2.19的64位Windows版本,这个版本是Apache的一个稳定版本,适用于许多项目。下载并解压此RAR文件后,你会得到Apache的安装目录,包括配置文件、可执行文件等。在安装过程中...

    LINUX下Web服务器配置.docx

    在Linux环境下配置Web服务器是许多IT专业人士的基本技能之一,尤其是...这只是一个基础配置,实际生产环境中可能需要进一步的安全加固、性能优化以及日志监控等。不断学习和实践,你的Linux服务器管理技能将日益强大。

    相关LAMP(apache+php+mysqld)安装完整教程参考.pdf

    在本文中,我们将深入探讨如何...通过以上步骤,你将成功地在Linux系统上构建了一个完整的LAMP开发环境。记得在实际操作中,要根据你的系统版本和软件版本调整配置选项。此外,保持软件更新以确保安全性是至关重要的。

    如何用C语言编写PHP扩展的详解

    在当今互联网开发领域中,PHP作为一种广泛使用的服务器端脚本语言,其性能和功能的扩展通常需要借助C语言编写的扩展模块。本文将详细介绍如何使用C语言编写PHP扩展,包括预定义、扩展骨架生成、源码修改、编译安装...

    Windows下Apache2.2 + Tomcat5.5 + Apr配置备忘录

    APR是一个C语言库,提供了操作系统接口的抽象层,使得Apache可以在多种平台上运行得更加高效。 首先,安装Apache2.2。下载适合Windows系统的Apache版本,确保它包含了支持APR和Tomcat集成所需的模块,如mod_jk或mod...

Global site tag (gtag.js) - Google Analytics