Apache模块开发/用C语言扩展apache
2012-02-09 14:35
609 查看
Apache模块开发/用C语言扩展apache(1:简述)
by linux_prog
Apache是一个非常稳定而且非常open的web server,它的很多功能都可以通过plugin的方式去扩展。
比如:mod_proxy使得apache可以作代理, mod_rewrite使得apache可以实现非常强大的url mapping和rewritting
功能,你是否也想自己来开发一个apache module呢?网上这方面的文章非常的少,而且全是E文,
希望我的这篇文章能够给你一些实质性的帮助。
开发apache module之前,我们有必要先分析一下其源代码。
$ cd httpd-2.2.4/
$ ls
其中:server/目录是apache核心程序的代码
include/目录存放主要的头文件
srclib/目录存放apr和apr-util代码(这两个是什么,后面介绍)
modules/目录下存放目前已经有的各种module(可以看看这些代码先)
$ cd include/
先分析一下apache的头文件
$ vi httpd.h
第766行,这个结构非常的重要,后面编写模块时都要用到这个结构,所以分析一下。
每个http request都会对应这个结构的一个实例。
由于apache的源代码都有很详细的英文注释,所以我也不翻译了。
可以看到源码中有很多apr_开头的结构,这个是什么呢?下节介绍一下。
by linux_prog
Apache是一个非常稳定而且非常open的web server,它的很多功能都可以通过plugin的方式去扩展。
比如:mod_proxy使得apache可以作代理, mod_rewrite使得apache可以实现非常强大的url mapping和rewritting
功能,你是否也想自己来开发一个apache module呢?网上这方面的文章非常的少,而且全是E文,
希望我的这篇文章能够给你一些实质性的帮助。
开发apache module之前,我们有必要先分析一下其源代码。
$ cd httpd-2.2.4/
$ ls
其中:server/目录是apache核心程序的代码
include/目录存放主要的头文件
srclib/目录存放apr和apr-util代码(这两个是什么,后面介绍)
modules/目录下存放目前已经有的各种module(可以看看这些代码先)
$ cd include/
先分析一下apache的头文件
$ vi httpd.h
第766行,这个结构非常的重要,后面编写模块时都要用到这个结构,所以分析一下。
每个http request都会对应这个结构的一个实例。
由于apache的源代码都有很详细的英文注释,所以我也不翻译了。
struct request_rec { //内存管理池,后面讲apr时会讲到 apr_pool_t *pool; conn_rec *connection; server_rec *server; request_rec *next; request_rec *prev; request_rec *main; char *the_request; int assbackwards; int proxyreq; int header_only; char *protocol; int proto_num; const char *hostname; apr_time_t request_time; const char *status_line; int status; const char *method; int method_number; apr_int64_t allowed; apr_array_header_t *allowed_xmethods; ap_method_list_t *allowed_methods; apr_off_t sent_bodyct; apr_off_t bytes_sent; apr_time_t mtime; int chunked; const char *range; apr_off_t clength; apr_off_t remaining; apr_off_t read_length; int read_body; int read_chunked; unsigned expecting_100; apr_table_t *headers_in; apr_table_t *headers_out; apr_table_t *err_headers_out; apr_table_t *subprocess_env; apr_table_t *notes; const char *content_type; const char *handler; const char *content_encoding; apr_array_header_t *content_languages; char *vlist_validator; char *user; char *ap_auth_type; int no_cache; int no_local_copy; char *unparsed_uri; char *uri; char *filename; char *canonical_filename; char *path_info; char *args; apr_finfo_t finfo; apr_uri_t parsed_uri; int used_path_info; struct ap_conf_vector_t *per_dir_config; struct ap_conf_vector_t *request_config; const struct htaccess_result *htaccess; struct ap_filter_t *output_filters; struct ap_filter_t *input_filters; struct ap_filter_t *proto_output_filters; struct ap_filter_t *proto_input_filters; int eos_sent; }; |
相关文章推荐
- C语言扩展Apache模块开发入门篇
- C语言扩展Apache模块开发入门篇
- Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)
- C语言扩展Apache模块开发入门篇
- Apache模块开发/用C语言扩展apache(4:一个生产环境使用的apache module)
- Apache模块开发/用C语言扩展apache(3:一个非常简单的apache module)
- Apache模块开发/用C语言扩展apache(1:简述)
- C语言扩展Apache模块开发入门篇
- Apache模块开发/用C语言扩展apache
- C语言扩展Apache模块开发入门篇
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)
- C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)
- Linux-FreeBSD下用C语言开发PHP的so扩展模块例解
- Linux/Ubuntu下C语言开发PHP的.so扩展模块过程
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- Linux/FreeBSD下用C语言开发PHP的so扩展模块例解
- C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)
- C语言-apache mod(模块开发)-采用apxs开发实战(centos7.2 linux篇)