nginx-如何将自己的HTTP模块编译进nginx

上一篇博客讲解了nginx相关的数据结构。

这一篇主要交接如何将自己的模块编译进nginx;

  1. 一种常用的简单方法:

    1)首先把源代码文件全部放大一个目录下,然后在改目录中编写一个config用于通知Nginx如何编译本模块,这个文件名必须为config。

  2. 在configure脚本执行时加入参数--add-module=PATH(上面源码,config的保存目录)

  3. 执行正常安装流程是完成Nginx的编译工作。




ps:还有一种复杂方式,就是修改configure脚本执行后生成的obj/Makefile和obj/ngx_module.c文件。

  以后进行讲解

-------------------------------------------------------------------------------------------


2.config的写法:

    其实config就是一个shell脚本,若是只想开发一个HTTP模块,需要定义3个变量

    1.ngx_addon_name:仅在configure执行时使用,一般设置为模块名称。

    2.HTTP_MODULES:保存所有HTTP模块名称,空格符相连。重新设置时不要覆盖,只需要添加

    例:&HTTP_MODULES ngx_http_my_test_module

    3.NGC_ADDON_SRCS:用于指定模块的源代码,空格符相连。

    ps:设置时可以使用&ngx_addon_dir变量,等价于configure执行时的--add-module=PATH.

    例:

    ngx_addon_name=ngx_http_mytest_module

    HTTP_MODULES="$HTTP_MODULES ngx_http_mytest_modue"

    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_mytest_module.c"


下面声明一个重点:

    以上的3个变量并不是唯一可以再config中自定义的部分,如果开发一个HTTP过滤模块,则需要用HTTP_FILTER_MODULES替代HTTP_MODULES

    $CORE_MODULES:核心模块。

    $EVENT_MODULES:事件模块

    $HTTP_MODULES:HTTP模块

    $HTTP_FILTER_MODULES:HTTP过滤模块

    $HTTP_HEADERS_FILTER_MODULES:HTTP头部过滤模块.

    等。$NGX_ADDON_DEPS:指定模块依赖路径。

-------------------------------------------------------------------------------------------


3.利用configure脚本将制定的模块加入nginx中

    首先nginx是通过configure生成程序的

    在configure中。

    .auto/modules

    .auto/make

    这2行代码是讲第三方模块加入到nginx中

    

 1)configure如何利用config文件加入nginx中

    --add-module=*)    NGX_ADDONS="$NGX_ADDONS $value" ;;

  

   在configure命令执行到auto/modules脚本时,将生成ngx_modules.c文件中加入制定的第三方模块。

下面是部分源码:

if test -n "$NGX_ADDONS";then
    
    echo configuring addtional  modules
    
    for ngx_addon_dir in $NGX_ADDONS
    do
        echo "adding module in $ngx_addon_dir"
        
        if test -f $ngx_addon_dir/config; then
            .$ngx_addon_dir/config
            
            echo "+ $nginx_addon_name was configured"
        
        else
            echo "错误信息"
            exit 1
         fi
    done
fi

当遍历config文件后。就会在ngx_modules.c中定义一个ngx_module_t *ngx_modules[]数组,通过处理请求时的循环访问数组确定该用哪一个模块来处理。

最后就是auto/make把相关模块编译进nginx。

-------------------------------------------------------------------------------------------

4.直接修改Makefile文件

 适用于我们需要重新决定ngx_module* ngx_modules[]数组中各模块的顺序,或者在编译源代码时需要加入一些独特的编译选项,那么可以再执行完configure后,对objs/ngx_modules.c和objs/Makefile文件直接进行修改


首先,当我们要修改ngx_modules.c时候,需要加上一行代码

    extern ngx_module_t ngx_http_mytypes_module;

然后主动加上ngx_modules数组中

ngx_modules_t *ngx_modules[] = {
    ...
    &ngx_http_upstream_ip_hash_module,
    &ngx_http_mytest_module,
    $ngx_http_write_filter_module,
    ...
    NULL
};

注意我么模块加入的顺序十分重要,因为nginx中模块调用顺序是正序所需

最后就是修改Makefile.

obj/addon/httpmodule/ngx_http_mytest_modules.0:$(ADDON_DEPS)\
    ../sample/httpmodule/ngx_http_mytest_modules.c
    $(CC) -c $(CFLAGS) $(ALL_INCS) \
           -o objs/addon/httpmdoule/ngx_http_mytest_module.o\
           ../sample/httpmodule//ngx_http_mytest_module.c

然后把目标文件链接到Nginx中

objs/nginx:   objs/src/core/nginx.o
...
    objs/addon/httpmodule/ngx_http_mytest_module.o\
    objs/ngx_modules.o
    
    $(LINK) -o objs/nginx\
    objs/src/core/nginx.o\
    ...
    objs/addon/httpmodule/ngx_http_mytest_module.o\
    objs/ngx_modules.o\
    -lpthread -lcrypt -lpcre -lcrypto -lcrypto -lz

这个是修改文件,所以不正确的修改可能导致nginx出错,所以慎用

本文出自 “剩蛋君” 博客,转载请与作者联系!

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

OpenLDAP 客户端部署 - 2016-08-29 17:08:32

有关服务端的安装请点击 一、账号登录系统流程讲解 当在客户端输入账号登录系统时,系统根据/etc/nsswitch.conf配置文件获取账号查找顺序,然后再根据PAM配置文件调用相关模块,对账号(/etc/passwd)及密码(/etc/shadow)进行查找并进行匹配。当本地匹配不成功时,会通过后端认证服务器(OpenLDAP服务器)进行验证。 二、配置文件功能介绍 下面介绍几个配置文件再后面我们会进行修改,我这里简单介绍一下。 /etc/nsswitch.conf 该文件主要用于名称转换服务,用于系统
1. root下进入其他用户主目录 cd ~USERNAME 2. touch的另外的一种作用 常用的是touch创建一个不存在的文件 而touch一个存在的文件时候,touch会修改文件的三个时间(使用stat可以查看),其中access表示最后一个访问时间,modify表示最后一次修改文件的时间,change表示最后修改文件属性的时间 3. file查看文件类型 镜像文件(iso)的文件类型为iso9660 4./etc/passwd中各字段对应解释 1 用户名:2密码:3uid:4gid:5备注:6
谁说Lync Server 前端不可以使用Windows网络负载平衡实现高可用的?(仅限测试环境) 本章内容有: 1.两台Lync Server安装Windows功能---网络负载平衡 2.配置网络负载平衡 3.DNS记录修改 4.测试故障切换(模拟两种故障,网络故障和服务故障) 5.开始的时候别忘了上一章中的提示,将两台前端Server都进行重启 = = 安装网络负载平衡 两台服务器都需要进行安装 = = 配置网络负载平衡 1)新建群集 2)将LyncFE01先添加到群集中 3)群集IP自己随便填写 4

深入剖析linux磁盘管理 - 2016-08-29 17:08:26

一、linux中常见的磁盘: 无论什么操作系统,归根还是要落实与磁盘上的,对于磁盘的管理也是linux管理必备的一项技能。在linux中“一切皆文件”的思想贯彻整个linux的学习中,包括像是磁盘等的硬件也是在linux的/dev/目录下类似于文件形式的存放,常见的SATA口USB优盘或是SCSI口的硬盘在linux中是以/dev/sd[a-p]开头的文件,早期的IDE硬盘现在已经很少见了,这种硬盘在linux中是以/dev/hd[a-d],CDROM是以/dev/cdrom开头的文件,磁带机/dev/s

linux实战题 - 2016-08-29 17:08:10

在配置Apache时,执行了./configure --prefix=/application/apache2.2.17来编译Apache,在make install完成后,需要用户的访问路径更加简单 ,需要给/application/apache2.2.17目录做一个软链接/application/apache,是得内部人员可以通过/application/apache就可以访问到Apache的安装目录/application/apache2.2.17下的内容 ,请给出实现命令。(安装时有版本号,后面使
一 VNC简介 VNC 是在基于Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver 和 vncviewer VNC基本上是由两部分组成:一部分是 客户端的应用程序(vncviewer) ;另外一部分是 服务器端的应用程序(vncserv
目标: 在xuegod63.cn服务器上,使用网站模版UCenter_1.5.0_SC_UTF8.zip和UCenter_Home_2.0_SC_UTF8.zip为公司搭建一个类似人人网的网站。在windows上,使用访问uc.duwers63.cn可以访问UCenter;使用www.duwers63.cn可以访问UCenter_Home。 安装 yum-yinstallhttpdmysql-servermysqlphpphp-mysql 软件包解释: httpd#web网站服务器 mysql-serve
在某些情况下为了实现Windows多台服务器负载均衡,需要使用共享来做图片及附件的上传空间。 这个时候就需要使用到Samba、IIS虚拟目录等相关技术 Web服务器使用upload作为上传的目录,现在需要使用2台服务器做负载均衡,后台使用一台Samba服务器作为文件共享存储 1.建立Samba文件服务器 卸载旧的samba组件,CentOS 6默认安装的是3.6的版本 forain`rpm-qa|grepsamba`;dorpm-e--nodeps$a;done 2.安装Samba 4 yum-yinst
Linux iptables简介 基于包过滤的防火墙工具,功能强大,使用灵活,可以对流入和流出服务器的数据包进行精细的控制 iptable 工作流程 iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,然后根据我们预先设定好的规则进行过滤 1)iptables对数据包的过滤是一层层过滤的,顺序从上到下,从左到右 2)如果在某一层匹配上规则(也就是明确表明对该数据包是拒绝还是通过),不再向下匹配,直接应用 3)如果所有规则中都没有匹配上,匹配默认规则,默认规则允许则允许,拒
Cobbler简介 运维自动化包括标准化、工具化、Web化、服务化、智能化等几个不同的层级,在一家规模稍大、拥有服务器上千台甚至是几万台的生产环境中,想要真正实现运维自动化,工具化系统安装流程、统一系统安装规范,是其中最不能忽略的重要环节。普通的自动化部署可以采用pxe+dhcp+tftp配合kickstart实现,但是面对多版本、多部署需求的情况下,这种普通的部署方式可能达不到我们的要求;这时候就需要借助cobbler开源自动化部署工具来实现。 Cobbler是一款快速的网络系统部署工具,其最大的特点是