当前位置: 首页 > news >正文

网页设计与网站建设有区别吗湛江专业建站联系方式

网页设计与网站建设有区别吗,湛江专业建站联系方式,品牌策划的流程,电竞竞猜网站 建设文章目录 模块配置结构模块配置指令先看一下 ngx_command_t 结构一个模块配置的demo简单模块配置的案例演示 模块上下文结构模块的定义 模块配置结构 Nginx中每个模块都会提供一些指令#xff0c;以便于用户通过配置去控制该模块的行为。 Nginx的配置信息分成了几个作用域(sc… 文章目录 模块配置结构模块配置指令先看一下 ngx_command_t 结构一个模块配置的demo简单模块配置的案例演示 模块上下文结构模块的定义 模块配置结构 Nginx中每个模块都会提供一些指令以便于用户通过配置去控制该模块的行为。 Nginx的配置信息分成了几个作用域(scope,有时也称作上下文)。作用域有main, server, 以及location。 模块配置指令 先看一下 ngx_command_t 结构 位置 src/core 目录下 ngx_conf_file.h ngx_command_t原型 typedef struct ngx_command_s 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); // 具体见下文ngx_uint_t conf; /*该字段被NGX_HTTP_MODULE类型模块所用 (我们编写的基本上都是NGX_HTTP_MOUDLE只有一些nginx核心模块是非NGX_HTTP_MODULE)该字段指定当前配置项存储的内存位置。实际上是使用哪个内存池的问题。因为http模块对所要保存的配置信息划分了main, server和location三个地方进行存储每个地方都有一个内存池用来分配存储这些信息的内存。这里可能的值为 NGX_HTTP_MAIN_CONF_OFFSET、NGX_HTTP_SRV_CONF_OFFSET或NGX_HTTP_LOC_CONF_OFFSET。当然也可以直接置为0就是NGX_HTTP_MAIN_CONF_OFFSET。*/ngx_uint_t offset; /*指定该配置项值的精确存放位置一般指定为某一个结构体变量的字段偏移。因为对于配置信息的存储一般我们都是定义个结构体来存储的。那么比如我们定义了一个结构体A该项配置的值需要存储到该结构体的b字段。那么在这里就可以填写为offsetof(A, b)。对于有些配置项它的值不需要保存或者是需要保存到更为复杂的结构中时这里可以设置为0。*/void *post; /* 该字段存储一个指针。可以指向任何一个在读取配置过程中需要的数据以便于进行配置读取的处理。大多数时候都不需要所以简单地设为0即可。*/ }; 补充说明 1对type字段 nginx提供了很多预定义的属性值一些宏定义通过逻辑或运算符可组合在一起形成对这个配置指令的详细的说明。 属性值可以有 NGX_CONF_NOARGS配置指令不接受任何参数。 NGX_CONF_TAKE1配置指令接受1个参数。 NGX_CONF_TAKE2配置指令接受2个参数。 NGX_CONF_TAKE3配置指令接受3个参数。 NGX_CONF_TAKE4配置指令接受4个参数。 NGX_CONF_TAKE5配置指令接受5个参数。 NGX_CONF_TAKE6配置指令接受6个参数。 NGX_CONF_TAKE7配置指令接受7个参数。 可以组合多个属性比如一个指令即可以不填参数也可以接受1个或者2个参数。那么就是 NGX_CONF_NOARGS|NGX_CONF_TAKE1|NGX_CONF_TAKE2。 nginx还提供了一些定义使用起来更简洁 NGX_CONF_TAKE12配置指令接受1个或者2个参数。 NGX_CONF_TAKE13配置指令接受1个或者3个参数。 NGX_CONF_TAKE23配置指令接受2个或者3个参数。 NGX_CONF_TAKE123配置指令接受1个或者2个或者3参数。 NGX_CONF_TAKE1234配置指令接受1个或者2个或者3个或者4个参数。 NGX_CONF_1MORE配置指令接受至少一个参数。 NGX_CONF_2MORE配置指令接受至少两个参数。 NGX_CONF_MULTI配置指令可以接受多个参数即个数不定。 NGX_CONF_BLOCK配置指令可以接受的值是一个配置信息块。也就是一对大括号括起来的内容。里面可以再包括很多的配置指令。比如常见的server指令就是这个属性的。 NGX_CONF_FLAG配置指令可以接受的值是”on”或者”off”最终会被转成bool值。 NGX_CONF_ANY配置指令可以接受的任意的参数值。一个或者多个或者”on”或者”off”或者是配置块。 需要说明的是无论如何nginx的配置指令的参数个数不可以超过NGX_CONF_MAX_ARGS个。目前这个值被定义为8也就是不能超过8个参数值。 下面介绍一组说明配置指令作用域的相关属性 NGX_DIRECT_CONF可以出现在配置文件中最外层。例如已经提供的配置指令daemonmaster_process等。 NGX_MAIN_CONFhttp、mail、events、error_log等。 NGX_ANY_CONF该配置指令可以出现在任意配置级别上。 对于我们编写的大多数模块而言都是在处理http相关的事情也就是所谓的都是NGX_HTTP_MODULE对于这样类型的模块其配置可能出现的位置也是分为直接出现在http里面以及其他位置 NGX_HTTP_MAIN_CONF 可以直接出现在http配置指令里。 NGX_HTTP_SRV_CONF可以出现在http里面的server配置指令里。 NGX_HTTP_LOC_CONF可以出现在http server块里面的location配置指令里。 NGX_HTTP_UPS_CONF可以出现在http里面的upstream配置指令里。 NGX_HTTP_SIF_CONF可以出现在http里面的server配置指令里的if语句所在的block中。 NGX_HTTP_LMT_CONF可以出现在http里面的limit_except指令的block中。 NGX_HTTP_LIF_CONF可以出现在http server块里面的location配置指令里的if语句所在的block中。 2对set字段 这是一个函数指针当nginx在解析配置的时候如果遇到这个配置指令将会把读取到的值传递给这个函数进行分解处理。因为具体每个配置指令的值如何处理只有定义这个配置指令的人是最清楚的。 函数原型 // 处理成功时返回NGX_OK否则返回NGX_CONF_ERROR或者是一个自定义的错误信息的字符串。 /* cf: 该参数里面保存从配置文件读取到的原始字符串以及相关的一些信息。特别注意的是这个参数的args字段是一个ngx_str_t 类型的数组该数组的首个元素是这个配置指令本身第二个元素是指令的第一个参数第三个元素是第二个参数依次类推。*/ /* cmd: 这个配置指令对应的ngx_command_t结构。*/ /* conf: 就是定义的存储这个配置值的结构体用户在处理的时候可以使用类型转换转换成自己知道的类型再进行字段的赋值。*/ char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);为了更加方便的实现对配置指令参数的读取nginx已经默认提供了对一些标准类型的参数进行读取的函数可以直接赋值给set字段使用。 下面列出这些已经实现的set类型函数 ngx_conf_set_flag_slot读取NGX_CONF_FLAG类型的参数。 ngx_conf_set_str_slot读取字符串类型的参数。 ngx_conf_set_str_array_slot读取字符串数组类型的参数。 ngx_conf_set_keyval_slot读取键值对类型的参数。 ngx_conf_set_num_slot读取整数类型(有符号整数ngx_int_t)的参数。 ngx_conf_set_size_slot读取size_t类型的参数也就是无符号数。 ngx_conf_set_off_slot读取off_t类型的参数。 ngx_conf_set_msec_slot 读取毫秒值类型的参数。 ngx_conf_set_sec_slot读取秒值类型的参数。 ngx_conf_set_bufs_slot读取的参数值是2个一个是buf的个数一个是buf的大小。例如 output_buffers 1 128k; ngx_conf_set_enum_slot读取枚举类型的参数将其转换成整数ngx_uint_t类型。 ngx_conf_set_bitmask_slot读取参数的值并将这些参数的值以bit位的形式存储。例如HttpDavModule模块的dav_methods指令。 一个模块配置的demo static ngx_command_t ngx_http_hello_commands[] {{ngx_string(hello_string),NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1,ngx_http_hello_string,NGX_HTTP_LOC_CONF_OFFSET,offsetof(ngx_http_hello_loc_conf_t, hello_string),NULL },ngx_null_command // 每个模块配置后必不可少的 // 它的原型是 #define ngx_null_command { ngx_null_string, 0, NULL, 0, 0, NULL } };我们定义的配置指令一个叫hello_string可以接收一个或零个参数可以出现在http server块里面的location配置指令里。该配置的处理函数是ngx_http_hello_string。该配置作用域在NGX_HTTP_LOC_CONF_OFFSET(location中)。该配置信息保存在自定义结构体ngx_http_hello_loc_conf_t 的hello_string字段。 简单模块配置的案例演示 首先我们在src/core/nginx.c文件中找到ngx_core_commands数组。 在该数组中添加一条自定义配置。 实现处理函数ngx_conf_my_handler(这个函数名是自己起的)。 重新编译install。 在nginx.conf配置文件中加上自定义的配置。 测试./nginx -t 模块上下文结构 这是一个ngx_http_module_t类型的静态变量。这个变量实际上是提供一组回调函数指针这些函数有在创建存储配置信息的对象的函数也有在创建前和创建后会调用的函数。 ngx_http_module_t结构原型 typedef struct {ngx_int_t (*preconfiguration)(ngx_conf_t *cf); // 在创建和读取该模块的配置信息之前被调用。ngx_int_t (*postconfiguration)(ngx_conf_t *cf); // 在创建和读取该模块的配置信息之后被调用。void *(*create_main_conf)(ngx_conf_t *cf); /* 调用该函数创建本模块位于http block的配置信息存储结构。该函数成功的时候返回创建的配置对象。失败的话返回NULL。*/char *(*init_main_conf)(ngx_conf_t *cf, void *conf); /* 调用该函数初始化本模块位于http block的配置信息存储结构。该函数成功的时候返回NGX_CONF_OK。失败的话返回NGX_CONF_ERROR或错误字符串。*/void *(*create_srv_conf)(ngx_conf_t *cf); /* 调用该函数创建本模块位于http server block的配置信息存储结构每个server block会创建一个。该函数成功的时候返回创建的配置对象。失败的话返回NULL。*/char *(*merge_srv_conf)(ngx_conf_t *cf, void *prev, void *conf); /* 因为有些配置指令既可以出现在http block也可以出现在http server block中。那么遇到这种情况每个server都会有自己存储结构来存储该server的配置但是在这种情况下http block中的配置与server block中的配置信息发生冲突的时候就需要调用此函数进行合并该函数并非必须提供当预计到绝对不会发生需要合并的情况的时候就无需提供。当然为了安全起见还是建议提供。该函数执行成功的时候返回NGX_CONF_OK。失败的话返回NGX_CONF_ERROR或错误字符串。*/void *(*create_loc_conf)(ngx_conf_t *cf); /* 调用该函数创建本模块位于location block的配置信息存储结构。每个在配置中指明的location创建一个。该函数执行成功返回创建的配置对象。失败的话返回NULL。*/char *(*merge_loc_conf)(ngx_conf_t *cf, void *prev, void *conf); /* 与merge_srv_conf类似这个也是进行配置值合并的地方。该函数成功的时候返回NGX_CONF_OK。失败的话返回NGX_CONF_ERROR或错误字符串。*/ } ngx_http_module_t; Nginx里面的配置信息都是上下一层层的嵌套的对于具体某个location的话对于同一个配置如果当前层次没有定义那 么就使用上层的配置否则使用当前层次的配置。 这些配置信息一般默认都应该设为一个未初始化的值针对这个需求Nginx定义了一系列的宏定义来代表各种配置所对应 数据类型的未初始化值如下 #define NGX_CONF_UNSET -1 #define NGX_CONF_UNSET_UINT (ngx_uint_t) -1 #define NGX_CONF_UNSET_PTR (void *) -1 #define NGX_CONF_UNSET_SIZE (size_t) -1 #define NGX_CONF_UNSET_MSEC (ngx_msec_t) -1模块的定义 对于开发一个模块来说我们都需要定义一个ngx_module_t类型的变量来说明这个模块本身的信息从某种意义上来说这是这个模块最重要的一个信息它告诉了nginx这个模块的一些信息上面定义的配置信息还有模块上下文信息都是通过这个结构来告诉nginx系统的也就是加载模块的上层代码都需要通过定义的这个结构来获取这些信息。 ngx_module_t 原型 typedef struct ngx_module_s ngx_module_t; struct ngx_module_s {ngx_uint_t ctx_index;ngx_uint_t index;char *name;ngx_uint_t spare0;ngx_uint_t spare1;ngx_uint_t version;const char *signature;void *ctx;ngx_command_t *commands;ngx_uint_t type;ngx_int_t (*init_master)(ngx_log_t *log);ngx_int_t (*init_module)(ngx_cycle_t *cycle);ngx_int_t (*init_process)(ngx_cycle_t *cycle);ngx_int_t (*init_thread)(ngx_cycle_t *cycle);void (*exit_thread)(ngx_cycle_t *cycle);void (*exit_process)(ngx_cycle_t *cycle);void (*exit_master)(ngx_cycle_t *cycle);uintptr_t spare_hook0;uintptr_t spare_hook1;uintptr_t spare_hook2;uintptr_t spare_hook3;uintptr_t spare_hook4;uintptr_t spare_hook5;uintptr_t spare_hook6;uintptr_t spare_hook7; };模块可以提供一些回调函数给nginx当nginx在创建进程线程或者结束进程线程时进行调用。但大多数模块在这些时刻并不需要做什么所以都简单赋值为NULL。
http://www.dnsts.com.cn/news/200889.html

相关文章:

  • 专门做团购的网站有哪些如何建设一个简易网站
  • 网站免费发布与推广企业介绍网页制作
  • 科技 公司 响应式 网站搜索引擎营销成功的案例
  • 杭州网站艰涩建设网站用什么软件
  • 企业网站建设需要费用手机app设计网站建设
  • 个人网站 虚拟主机价格amp 插件 wordpress
  • 软件介绍网站模板弹窗广告最多的网站
  • 宜昌网站建设宜昌做头像的网站
  • 做家装的网站有什么四会城乡建设局网站
  • 简约好看的网站模板直通车怎么开才有效果
  • 销售平台网站建设方案wordpress文章有模板下载
  • 网站开发 总结报告郴州seo公司
  • 网站建设后台是怎么制作的济南网站建设小程序
  • 网站的投资和建设项目域名备案要先做网站的吗
  • 网站设计电脑培训学校哈尔滨城市规划建设网
  • 07年做网站建设部 招投标网站
  • 律师事务所网站建设1688货源网一件代发拼多多
  • 政工网站建设方案可拖拽式网站建设
  • 上海建材网站建设工业企业展厅设计公司
  • 国外免费网站贸易平台前十名俄罗斯搜索引擎yandex推广入口
  • 河南网站备案代理企业规划设计
  • 网易云播放器做网站播放做网站和app哪类商标
  • 个人网站域名快速备案流程广西网站建设运营费用
  • 网站上的文章用秀米可以做吗手机网站添加微信方式
  • 济宁网站建设找哪家租车网站模板
  • 小程序网站开发公司网页升级访问正在跳转中
  • 获得网站php管理员密码网站设计公司多少钱
  • 海南微信网站制作平台河北建设网工程信息网
  • 南宁建筑网站wordpress搬家打不开
  • 做网站视频图片加载不出来中文网站建设