毕设需要开发一个 Nginx 模块,用到的一个第三方模块里使用了变量,本来打算直接利用他的变量的,结果用上以后启动 Nginx 总是提示我的配置项重复
第三方模块里定义变量的配置项设置如下
{ ngx_string("upload_field_name"), NULL, ngx_http_upload_variable,
(uintptr_t) offsetof(ngx_http_upload_ctx_t, field_name),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
他的标志位设置为 NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH ,结合《深入理解 Nginx 》里提到的,『如果我们定义了一个变量,但设定为不能 hash 进入散列表,同时,使用该变量的模块又没有把它加入索引数组,那么这个变量是无法使用的』,是不是意味着这个变量只能他自己使用,其他模块使用不了哇
烦请懂这个的大佬解惑一下,谢谢
1
sujin190 2022-03-19 12:28:11 +08:00 via Android
你这不叫变量,叫配置项吧,配置项当然不可以重复了,静态编译的话或许可以考虑直接 include 对方头文件试试看
|
2
xQmQ OP static ngx_http_variable_t ngx_http_upload_variables[] = {
{ ngx_string("upload_field_name"), NULL, ngx_http_upload_variable, (uintptr_t) offsetof(ngx_http_upload_ctx_t, field_name), NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 }, ...... } 那个第三方模块源码里是这么定义的,应该就是变量 配置文件里我启动自己定义的配置项没有任何问题,功能也正常;加入一些简单的代码用来获取第三方模块的变量,就提示我的配置项重复了 所以我是在琢磨是不是第三方模块定义变量时候那个标志位设置的问题,导致我这边用不了 |
4
dndx 2022-03-19 15:16:22 +08:00
变量名都是全局唯一的,别的模块已经用了这个名字,你别跟别人用一摸一样的名字啊。
|