- 博客(6)
- 资源 (3)
- 收藏
- 关注
原创 nginx过滤模块怎么生效的
如果我们的模块不是HTTP_FILTER_MODULES,那么我们的模块则一定排在ngx_http_header_filter_module之前,因此我们的模块被先初始化,即使我们挂了回调,那么等到调用ngx_http_header_filter_module模块初始化的时,直接重置了ngx_http_top_header_filter,使先前的链表直接失效了。在这里,最先初始化ngx_http_top_header_filter,之后的模块则都是。以header_filter为例,依次来形成了回调链表。
2024-10-18 14:53:28
358
原创 浅谈openresty
首先lua虽是脚本语言,但是他特别小巧,也是使用c来实现的,而且使用的LuaJIT的技术编译lua代码,运行效率比原来的lua解释器高出了许多,如果再深入到源码,会发现,openresty大致是使用向lua注册c函数或ffi方式实现lua对nginx接口,也可以这么理解,lua脚本源码在nginx启动的时候,就被翻译成了二进制的代码。由于是lua脚本级别的,开发效率自然高出许多,开发难度也降低了很多,不需要知道nginx的源码,只需要知道nginx的大概的流程和基础原理,还有基础配置。
2024-09-14 15:18:54
844
原创 nginx脚本原理if指令实现详解
函数也比较简单,=号后面的条件是常量还是变量(或复杂变量),如果是常量直接生成ngx_http_script_value_code_t,存放常量的值和长度,执行函数为ngx_http_script_value_code。最后则是生成ngx_http_script_if_code_t,其执行函数是ngx_http_script_if_code。其执行函数为ngx_http_script_var_code。变量的code_t,执行函数为ngx_http_script_var_code,计算(获取)出。
2024-06-12 15:51:21
1704
原创 nginx脚本原理(复杂变量)详解
ngx_http_script_engine_t会依次执行以code_t结尾的单元中的函数 code,nginx会每个执行翻译(编译)成一个对于的code_t结尾的结构体,最终使用ngx_http_script_engine_t来执行其中的每个结构体的code函数。变量使用的是ngx_http_script_var_code_t,其中的index就是该变量在全局数组中的下标,调用ngx_http_script_add_var_code进行添加到lengths和values中去。//值长度,变量值的长度。
2024-06-11 14:48:02
1145
原创 nginx-变量
第二个参数就是变量值,需要我们填充该结构体,data则是我们在ngx_http_add_variable时,填充到ngx_http_variable_s 结构体中的data,在某个地方使用了你的变量,那么ng就会调用 你定义好的 get_handler来获取变量的值。//变量标签特性,NGX_HTTP_VAR_CHANGEABLE ,NGX_HTTP_VAR_NOCACHEABLE。//变量的索引值,内置变量都在存储在一个全局的数组中的,通过下标去读取变量是最快的,nginx在启动的时候会初始化。
2024-06-07 15:14:16
1075
原创 nginx c++模块编译
所有的第三方模块都是按c++编译了,如果其中的某些模块需要按c编译,那么在 the addons source 处的for循环中做.c和.cpp判断,或者文件名的判断特殊处理。先说下为什么不能使用c++编译nginx,nginx是纯c写的,而且c++是兼容c的,但是用c++(g++)编译nginx的框架,就会出一大堆的错误。这样的代码使用c编译是没问题的,但是使用c++编译就会报错,c的语法没那么严格。跟nginx对接的地方,和c版一样,只不过代码中关于nginx需要用的c部分还是的使用c的编译方式。
2024-06-07 15:11:09
565
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人