将 Apache httpd 作为应用开发平台(3)

来源:developerworks 作者:developerworks
  

 

运行过滤器模块

对过滤器的配置与前几个小节略有差异,在 httpd.conf 中,不但要使用 LoadModule 指令加载过滤器模块,还要使用 SetOutputFilter 指令来指定过滤器的应用场景:


清单 21. httpd.conf 配置文件

				
 LoadModule filter_echo_post_module modules/mod_filter_echo_post.so 
 AddOutputFilter CaseFilter .cf 


 

我们在指令中指定,CaseFilter 这个过滤器仅对扩展名为 .cf 的 URL 请求做过滤,其他请求则不过滤。然后,在 DocumentRoot 中创建一个文件,名为 casetest.cf 的文件,内容如下:


清单 22. 测试文件内容

				
 $ cat casetest.cf 
 This line should be upcased. 
 So does this line. 

 

然后重启 Apache,并使用 curl 测试该过滤器,可以得到以下结果:


清单 23. 测试

				
 $ curl http://10.111.43.145:9527/casetest.cf 
 THIS LINE SHOULD BE UPCASED. 
 SO DOES THIS LINE. 

 

即,将该文件中的字符串转换为大写字母输出。

 

问题处理

实际开发过程中,代码很难一次性通过所有的应用场景,可能会有各种考虑不到的边界问题发生,因此需要一个方便的调试方式做支持。本文仅讨论在 Linux 操作系统环境下的调试。Apache 的开发者为此预留了一个入口,当启动 Apache 时,加入选项 (-X) 表示进入调试模式。

模块的调试

首先启动 gdb(Gnu Debugger),gdb 是 Linux 下调试的工具,调试程序非常方便。可以通过 gdb 以调试模式启动 httpd,设置断点,进行调试 ( 部分 gdb 冗余的输出已经被删除 ):


清单 24. 使用 gdb 调试 apache 模块

				
 $ gdb -q apache/bin/httpd 
 (gdb) break cust_echo_post_handler 
 Function "cust_echo_post_handler" not defined. 
 Make breakpoint pending on future shared library load? (y or [n]) y 
 Breakpoint 1 (cust_echo_post_handler) pending. 
 (gdb) run -X -d apache 
 Starting program: /home/pts/juntao/cprog/idp/apache/bin/httpd -X -d apache 
 Breakpoint 2 at 0x416a4a: file mod_cust_echo_post.c, line 122. 
 [Switching to Thread -1208781120 (LWP 23658)] 

 

break 是 gdb 中设置断点的命令,run 是 gdb 程序的命令,表示启动应用程序。run 之后,gdb 停留在控制台上,Apache 进入 main-loop。 这时候我们即可通过客户端发送请求到 Apache httpd:


清单 25. 使用 curl 模拟浏览器发送请求

				
 $ curl -F "file=@Makefile" http://10.111.43.145:9527/cust_echo_post 

 httpd 接受到请求之后,会进入我们预设的断点处,这样就可以开始调试:



清单 26. 调试

				
 Breakpoint 2, cust_echo_post_handler (req=0x8e1fad8) at mod_cust_echo_post.c:122 
 (gdb) 


 

这时候我们可以使用 next( 单步 )/step( 步入 )/print( 查看变量 ) 等命令来调试自己的模块。调试结束后,通过 quit 命令退出 gdb。gdb 本身功能非常强大,有兴趣的读者可以参考“参考资料”小节的资料。

 

结束语

本文介绍了 Apache httpd 开发平台的运行方式,请求处理流程。并将一个最简单的模块模板逐步扩展,形成一个可以使用的模块,该模块将根据配置信息,将客户端 POST 的数据进行大 / 小写转化。最后是一个简单的过滤器示例,通过对整个开发流程的熟悉,读者可以开始开发自己的 Apache 模块,以适应不同的实际开发场景。

 

 

下载

描述 名字 大小 下载方法
样例代码 apache_mod_tour.tar.gz 77KB HTTP

时间:2012-02-25 12:31 来源:developerworks 作者:developerworks 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量