Nginx 模块开发中的变量

2022-03-19 09:16:45 +08:00
 xQmQ

毕设需要开发一个 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 进入散列表,同时,使用该变量的模块又没有把它加入索引数组,那么这个变量是无法使用的』,是不是意味着这个变量只能他自己使用,其他模块使用不了哇

烦请懂这个的大佬解惑一下,谢谢

1717 次点击
所在节点    NGINX
4 条回复
sujin190
2022-03-19 12:28:11 +08:00
你这不叫变量,叫配置项吧,配置项当然不可以重复了,静态编译的话或许可以考虑直接 include 对方头文件试试看
xQmQ
2022-03-19 12:53:56 +08:00
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 },
......
}

那个第三方模块源码里是这么定义的,应该就是变量

配置文件里我启动自己定义的配置项没有任何问题,功能也正常;加入一些简单的代码用来获取第三方模块的变量,就提示我的配置项重复了
所以我是在琢磨是不是第三方模块定义变量时候那个标志位设置的问题,导致我这边用不了
xQmQ
2022-03-19 12:54:20 +08:00
@sujin190 忘 @了不好意思
dndx
2022-03-19 15:16:22 +08:00
变量名都是全局唯一的,别的模块已经用了这个名字,你别跟别人用一摸一样的名字啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/841403

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX