前言
因为公司在做apache模块开发,所以开始从一本叫《Apache模块开发指南》的开始学起。本文当做学习的笔记,将简要信息和个人理解记录下,以方便复习。随着项目的开展和学习的加深,本文会随着扩充。
启动
Apache 在启动阶段读取配置文件、加载模块和函数库,以及分配资源,并在启动阶段对这些资源进行初始化。Apache 在启动阶段拥有系统最高的权限,已单进程、单线程方式运行。
配置文件Httpd.conf
- 加载模块
LoadModule foo_module modules/mod_foo.so
- 网站目录
DocumentRoot /usr/local/Apache/htdocs
- 环境变量,有mod_env实现
SetEnv hello "hwllo,world!"
- 容器(Containers)
<VirtualHost *:80>
DocumentRoot /usr/www/example
ServerName www.example.com
ServerName Webmaster@example.com
ErrorLog "logs/dummy-host2.hleclerc-PC.ingenidev-error.log"
CustomLog /var/log/www.example.log
</VirtualHost>
概念
APR池(apr_pool_t)
是Apache中资源管理的核心。当一个资源被动态分配时,在APR池中国注册一个清理操作,保证资源在不需要的时候被释放掉配置记录
数据结构 ap_conf_vector_t,用途:1设置和过去全局的配置数据;2将临时数据保存到临时的对象中。在一个模块中应该尽量避免使用不安全的静态变量和全局变量- 内核对象
- request_rec 对象正 Apache 接受连接请求时创建,在处理完请求之后销毁。request_rec 对象拥有所有涉及处理该HTTP请求的内部数据,也包括Apache用来维护中间状态和客户端信息的一系列字段
- server_rec 对象定义逻辑 Web 服务器。每一个虚拟机都有紫的 server_rec 文件,报过服务器名称,服务器定义,资源,和限制,日志信息等。server_rec 对象在服务器启动阶段时对创建并一直持续到整个 Httpd 关闭为止。
- conn_rec 对象是一个 TCP 连接在 Apache 的内部表示。在apache接受一个来源于客户端的连接请求时创建,随后在该连接结束时销毁。
- process_rec 是一个操作系统对象。
Http请求的一个处理函数通过httpd.conf文件中使用SetHandler 和AddHandler指令进行配置
<Location /api/>
SetHandler glms_handler //mod_glms 模块的配置函数
</Location>