处理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. 小程序02 wxml和wxss

    微信小程序的排版就跟wxml和wxss有关,它们两者相当于HTML和CSS,其中wxml指定了界面的框架结构,而wxss指定了界面的框架及元素的显示样式. 一.wxml 界面结构wxmL比较容易理解, ...

  2. 微信小程序工具真机调试提示page "xxx/xxx/xxx" is not found

    解决方法: pages对象添加该页面

  3. springmvc @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    简介: handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri 部分(这里指uri templat ...

  4. jQuery判断一个元素是否为另一个元素的子元素(或者其本身)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head& ...

  5. 解决SimpleDateFormat线程安全问题

    package com.tanlu.user.util; import java.text.DateFormat; import java.text.ParseException; import ja ...

  6. vue-loader 细节

    vue-loader 能根据 .vue 文件,导入一个vue组件.我这里从 vue-cli 的构建项目中抽取了vue-loader 一个小例子出来:vuedemo/demo02 vue-loader ...

  7. Centos 7安装Mysql5.7

    1.下载(国内镜像,比搜狐的快一点):http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc ...

  8. LeetCode(20)Valid Parentheses

    题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the i ...

  9. POJ 2631 Roads in the North (求树的直径)

    Description Building and maintaining roads among communities in the far North is an expensive busine ...

  10. HTML元素的基本特性

    1,Disabled 特性: //Disabled 设置元素不可用: $(this).attr("disabled","disabled") //移除push元 ...