有了上面几篇文章的基础,大家自己再下点功夫,应该可以去写一些简单的模块了,下面贴出一个很简单的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/
提供了非常不错的文档,可以参考一下。
分享到:
相关推荐
在IT行业中,构建一个Web服务器通常涉及到安装和配置Apache、MySQL和PHP,这些是LAMP(Linux、Apache、MySQL、PHP)...开发扩展模块需要对底层系统有深入的了解,但完成后能提供高度自定义的功能,满足特定项目的需求。
《Apache模块开发实例.doc》可能是系列教程的第一步,它可能包含了一些基本的模块开发示例,比如如何创建一个简单的"Hello, World!"模块,通过这个实例,读者可以了解模块的基本结构和工作原理。 《指南.doc》可能...
本文将详细介绍如何为Apache 2.0开发一个名为 `mod_hello` 的自定义模块,该模块的功能是读取配置文件中的特定设置,并针对URL路径中以 `.hello` 结尾的请求进行处理。 #### 二、开发环境与准备 为了开发Apache ...
Apache的apxs(Apache eXtenSion tool)是一个用于构建、安装和管理Apache模块的命令行工具。它简化了模块开发过程,自动处理编译和链接步骤,并确保模块与Apache版本兼容。 开发Apache模块的基本步骤如下: 1. **...
开发Apache模块需要对C语言有深入理解,因为Apache的API主要是用C编写的。本书将引导读者了解Apache的内部工作原理,并逐步学习如何利用这些知识构建模块。 **Apache模块开发的基础** 1. **Apache架构**:首先,你...
3. **多重内容处理器**:一个模块可以包含多个内容处理程序回调函数,这些函数通过`handler_rec`数据结构关联,并在Apache配置文件中指定何时激活。 4. **内存池管理**:Apache提供了一种称为内存池的机制,允许...
在进行Web应用开发时,搭建一个可靠的本地测试环境是至关重要的第一步。本篇文章将详细介绍如何在本地计算机上配置Apache HTTP服务器以及PHP运行环境,以便能够高效地进行Web应用程序的开发与调试。 #### 二、...
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`模块的实现,用C语言编写,供Apache加载以扩展其功能。 在描述中提到,我们需要解压缩包含Apache 24和`mod_jk`的压缩包。首先,你需要确保你的系统已经...
Zevent是Apache HTTP Server的一个扩展模块,主要用于实现事件驱动的网络编程。它基于libevent库,利用异步非阻塞I/O来提高服务器性能,尤其适合处理大量并发连接。Zevent通过监听套接字上的事件,例如连接请求、...
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编译移植到NXP i.MX6Q A9 ...总之,Apache在嵌入式设备上的编译移植是一项技术含量高、步骤繁琐的任务,但通过这个过程,你可以更好地理解和掌握嵌入式系统软件开发的各个环节,为后续的项目开发打下坚实基础。
1. **Apache HTTP Server**:Apache是基于C语言开发的,它提供了丰富的模块支持,如mod_rewrite用于URL重写,mod_security提供Web应用安全防护,以及mod_proxy实现代理功能。Apache采用预读取模型(Prefork),适合...
前端时间因为客户的原因折腾了一下asp的扩展,在ATL的帮助下写一个asp的模块还是很容易的。不巧的时刚刚折腾完asp的COM就碰到另一个客户的问题。客户想给系统集成ICBC的接口,但是用ICBC的接口需要用他们的提供的...
文件`httpd-2.2.19-win64.rar`是Apache 2.2.19的64位Windows版本,这个版本是Apache的一个稳定版本,适用于许多项目。下载并解压此RAR文件后,你会得到Apache的安装目录,包括配置文件、可执行文件等。在安装过程中...
在Linux环境下配置Web服务器是许多IT专业人士的基本技能之一,尤其是...这只是一个基础配置,实际生产环境中可能需要进一步的安全加固、性能优化以及日志监控等。不断学习和实践,你的Linux服务器管理技能将日益强大。
在本文中,我们将深入探讨如何...通过以上步骤,你将成功地在Linux系统上构建了一个完整的LAMP开发环境。记得在实际操作中,要根据你的系统版本和软件版本调整配置选项。此外,保持软件更新以确保安全性是至关重要的。
在当今互联网开发领域中,PHP作为一种广泛使用的服务器端脚本语言,其性能和功能的扩展通常需要借助C语言编写的扩展模块。本文将详细介绍如何使用C语言编写PHP扩展,包括预定义、扩展骨架生成、源码修改、编译安装...
APR是一个C语言库,提供了操作系统接口的抽象层,使得Apache可以在多种平台上运行得更加高效。 首先,安装Apache2.2。下载适合Windows系统的Apache版本,确保它包含了支持APR和Tomcat集成所需的模块,如mod_jk或mod...