配置文件
Nginx配置文件分为4部分:main(全局配置),server(虚拟主机配置),upstream(主要为反向代理,负载均衡的相关配置),location(目录匹配设置)。
main配置影响其他所有配置;server会继承main的配置;location会继承server的配置;upstream不会继承指令。
模块概述
Nginx的模块不能和Apache一样动态添加,所有的模块都要预先编译进Nginx的二进制可执行文件中。Nginx模块有3种角色:
1.Handlers(处理模块)----------用于处理Http请求并输出内容
2.Filters(过滤模块) ----------用于过滤Handlers输出的内容
3.Load-balancers(负载均衡模块)---当多余一台的后端服务器供选择时,选择一台后端服务器并将Http请求转发到该服务器
Nginx模块的处理流程:
客户端发生Http请求到Nginx服务器 -> Nginx基于配置文件选择一个合适的处理模块 -> 负载均衡模块选择一个后端服务器 -> 处理模块并把输出缓冲放到第一个过滤模块上 -> 一直经过了N个过滤模块后 -> 把处理结果发送到客户端。
模块编写实践
我们现在创建一个输出"Hello World"的Nginx模块。
1.创建一个目录并进入:
-p /opt/myModule
/opt/myModule
2.创建Nginx的配置文件(名称为config):
/opt/myModule/config
并输入以下内容
ngx_addon_name=ngx_http_hello_world_module
ngx_http_hello_world_module"
$ngx_addon_dir/ngx_http_hello_world_modlue.c"
-lpcre"
3.创建模块的C程序文件(名称格式为"ngx_http_模块名称_module.c"),在本例中是ngx_http_hello_world_module.c
/opt/myModule/ngx_http_hello_world_module.c
输入以下内容
4.下载Nginx源码包,并将Hello world模块编译到其中:
--prefix=/usr/local/nginx --add-module=/opt/myModule
5.配置Nginx.conf,在server部分增加以下内容:
= /hello
{
hello_world;
}
6.启用Nginx,浏览器访问http://localhost/hello,就可以看到编写的模块输出"hello world"字符串。