处理http配置项可以分为下面4个步骤:

1)创建数据结构用于存储配置项对应的参数

2)设定配置项在nginx.conf中出现时的限制条件与回调方法

3)实现第2步中的回调方法,或者使用Nginx框架预设的14个回调方法

4)合并不同级别的配置块中出现的同名配置项

一、分配用于保存配置参数的数据结构

创建结构体(命名例子:ngx_http_mytest_conf_t)来存储配置项的参数值,使用ngx_http_module_t中的create_main_conf,create_srv_conf、create_loc_conf这三个回调方法把我们分配的用于保存配置项的结构体传递给http框架,即生成结构体。

使用结构体来存储配置项的参数值的原因:多个location块(http块、server块)中的相同配置项是允许同时生效的,即刚刚定义的结构体在Nginx的内存中会保存许多份,所以不能使用全局变量。

定义三个回调方法的原因:

http框架定义了3个级别的配置main、srv、loc,分别表示直接出现在http{}、server{}、location{}块内的配置项。当遇到http{}配置块时,http框架会调用以上三个方法;当遇到server{}块时会再次调用所有http模块的create_srv_conf,create_loc_conf回调方法;当遇到location{}时会调用create_loc_conf回调方法。

一个create_loc_conf方法的例子:

static void *ngx_http_mytest_create_loc_conf(ngx_conf_t *cf)

{

  ngx_http_mytest_conf_t *mycf;

  mycf=(ngx_http_mytest_conf_t *)ngx_pcalloc(cf->pool,sizeof(ngx_http_mytest_conf_t));

  if(mycf==NULL)

    return NULL:

  mycf->test_flag=NGX_CONF_UNSET;

  mycf->test_num=NGX_CONF_UNSET;

  //...类似上面的赋值

  return mycf;

}

二、设定配置项的解析方法

使用ngx_command_t结构来配置配置项:

struct ngx_command_s

{

  ngx_str_t name;//配置项名称

  ngx_uint_t type;//决定配置项可以在哪些块出现,以及可以携带的参数类型和个数

  char *(*set)(ngx_conf_t *cf,ngx_command_t *cmd,void *conf);//使用14种预设方法解析配置项

  ngx_uint_t conf;

  ngx_uint_t offset;

  void *post;

}ngx_command_t;

例子:使用14种预设的方法解析配置项

假设nginx.conf中有个配置项名称为test_flag,后面携带一个参数,取值必须是on或者off,故使用ngx_http_mytest_conf_t结构体中的ngx_flag_t my_flag成员来保存。

static ngx_command_t ngx_http_mytest_commands[]=

{

  ngx_string("test_flag"),

  NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,

  ngx_conf_set_flag_slot,//预设方法

  NGX_HTTP_LOC_CONF_OFFSET,

  offsetof(ngx_http_mytest_conf_t,my_flag),

  NULL},

  ngx_null_command

};

三、自定义配置项处理方法

先自定义结构体存储配置项参数值,再编写set方法。

四、合并配置项

调用ngx_http_module_t结构体中的merge_loc_conf方法,如何合并取决于具体的merge_loc_conf实现

【Nginx】如何使用http配置的更多相关文章

  1. Nginx反向代理的配置

    Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...

  2. nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

    前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简 ...

  3. nginx配置ssl双向验证 nginx https ssl证书配置

    1.安装nginx 参考<nginx安装>:http://www.ttlsa.com/nginx/nginx-install-on-linux/ 如果你想在单IP/服务器上配置多个http ...

  4. Nginx+tomcat负载均衡配置

    Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK ...

  5. nginx+tomcat集群配置(2)---静态和动态资源的分离

    前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...

  6. nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

    前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云 ...

  7. nginx反向代理的配置优化

    作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...

  8. nginx的安装与配置

    1.nginx的安装与配置 编译安装nginx需要实现安装开发包组“Development tools”和“Server Platform Development”.“Desktop Platform ...

  9. nginx上用fastcgi配置python环境

    费了2天的功夫,翻阅了无数的中文.英文资料,终于搞定.写下此文留待以后翻阅用      本文环境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5   ========== ...

  10. Nginx高性能服务器安装、配置、运维 (5) —— Nginx虚拟主机配置

    六.Nginx虚拟主机配置 建立基于域名的虚拟主机: (1)建立基于域名的虚拟主机配置文件(以abc.com为例): (2)更改虚拟主机配置文件: 更改配置如下(更改部分即可): server { l ...

随机推荐

  1. Springboot 配置文件与对象之间进行映射之@ConfigurationProperties

    一.将配置文件与实体类绑定1.1.将yaml配置文件的属性映射到Javabean中1.1.1.yaml配置文件注意:键值对的语法,键:之后必须要有空格 1.1.2.Javabean 定义注意:java ...

  2. [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系 - Zoe_J

    时间 2014-07-27 16:08:00  博客园-所有随笔区 原文  http://www.cnblogs.com/zoe-j/p/3871501.html 主题 StoryBoard 学习了一 ...

  3. Mysql数据库事件使用与示例

    1 事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...

  4. python中的参数、全局变量及局部变量

    1.位置参数.关键字参数.默认参数的使用 位置参数.关键字参数 def test(x,y,z): print(x) print(y) print(z) test(1,2,3) #位置参数,必须一一对应 ...

  5. java(List或Array数组)求交集、并集、差集, 泛型工具类

    业务需要求不同类型的交集.并集.差集为避免代码冗余编写工具类. 注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n ...

  6. c++_最大公共子串

    标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...

  7. Python数据分析 Pandas模块 基础数据结构与简介(二)

    重点方法 分组:groupby('列名') groupby(['列1'],['列2'........]) 分组步骤: (spiltting)拆分 按照一些规则将数据分为不同的组 (Applying)申 ...

  8. PCB线宽与电流计算器--在线计算

    http://eda365.com/article-12-1.html 计算线宽与载流量的关系,方便设计:单个人建议在有限的空间尽量将大电流线路加宽.

  9. B/S 开发和 C/S开发的区别

    导读:每天都从应用中心下载很多软件安装尝试,在自己的电脑上也装了很多软件,但是,就出现了一个问题,好比QQ,为什么有了APP,还要有网站应用呢?由此,结合到自己的学习,就衍生出一个问题:C/S 开发就 ...

  10. PTA 05-树8 File Transfer (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/670 5-8 File Transfer   (25分) We have a netwo ...