【Nginx】如何使用http配置
处理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配置的更多相关文章
- Nginx反向代理的配置
Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...
- nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路
前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简 ...
- nginx配置ssl双向验证 nginx https ssl证书配置
1.安装nginx 参考<nginx安装>:http://www.ttlsa.com/nginx/nginx-install-on-linux/ 如果你想在单IP/服务器上配置多个http ...
- Nginx+tomcat负载均衡配置
Nginx+tomcat是目前主流的java web架构,如何让nginx+tomcat同时工作呢,也可以说如何使用nginx来反向代理tomcat后端均衡呢?直接安装配置如下: 1.JAVA JDK ...
- nginx+tomcat集群配置(2)---静态和动态资源的分离
前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...
- nginx+tomcat集群配置(1)---根目录设定和多后端分发配置
前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云 ...
- nginx反向代理的配置优化
作者:守住每一天 blog:liuyu.blog.51cto.combbs:bbs.linuxtone.orgmsn:liuyubj520#hotmail.comemail:liuyu105#gmai ...
- nginx的安装与配置
1.nginx的安装与配置 编译安装nginx需要实现安装开发包组“Development tools”和“Server Platform Development”.“Desktop Platform ...
- nginx上用fastcgi配置python环境
费了2天的功夫,翻阅了无数的中文.英文资料,终于搞定.写下此文留待以后翻阅用 本文环境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5 ========== ...
- Nginx高性能服务器安装、配置、运维 (5) —— Nginx虚拟主机配置
六.Nginx虚拟主机配置 建立基于域名的虚拟主机: (1)建立基于域名的虚拟主机配置文件(以abc.com为例): (2)更改虚拟主机配置文件: 更改配置如下(更改部分即可): server { l ...
随机推荐
- docker存储管理
Docker 镜像的元数据 repository元数据 repository在本地的持久化文件存放于/var/lib/docker/image/overlay2/repositories.json中 ...
- IIR数字滤波器
对于N阶IIR的计算方程式为: 一阶 Y(n)=a∗X(n)+(1−a)∗Y(n−1) 二阶 y[n]=b0⋅x[n]+b1⋅x[n−1]+b2⋅x[n−2]−a1⋅y[n−1]−a2⋅y[n−2]
- isEqual ,判断两个对象或变量是否相等
function isEqual(a, b) { //如果a和b本来就全等 if (a === b) { //判断是否为0和-0 return a !== 0 || 1 / a === 1 / b; ...
- 剑指Offer(Python)
014-链表中倒数第k个结点 用快慢指针:p2比p1先走到k:间隔了k-1)步,然后再一起走,当p2为最后一个时,p1就为倒数第k个数 class ListNode: def __init__(sel ...
- vue-cli中添加使用less
在vue-cli中构建的项目是可以使用less的,但是查看package.json可以发现,并没有less相关的插件,所以我们需要自行安装. 第一步:安装 npm install less less- ...
- tabs标签页的数据缓存
一进入tabs标签页默认就将所有标签页的数据请求到,并渲染到页面上, 这样如果数据量太大的话会渲染很久, 我的需求就是点击不同的标签时再请求数据,同时对点击过的标签页数据进行缓存,下次点击时不再重新请 ...
- dell服务器快速设置idrac
前提:将服务器专用的idrac网络接口,连接到网络上 1.登录到服务器(即被监控的服务器). 2.安装客户端工具 yum install OpenIPMI OpenIPMI-devel OpenI ...
- 20. Valid Parentheses (python版)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- ruby on rails全局布局,局部视图,局部布局
参考链接:http://guides.ruby-china.org/layouts_and_rendering.html#%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E6 ...
- php file_get_contents json_decode 输出为NULL
解决办法一:不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,如下处理才能正确解析json数据: $info = json_decode(trim($info,c ...