V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
xQmQ
V2EX  ›  NGINX

Nginx 模块开发中的变量

  •  
  •   xQmQ · 2022-03-19 09:16:45 +08:00 · 1683 次点击
    这是一个创建于 741 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2022-03-19 15:16:22 +08:00
    sujin190
        1
    sujin190  
       2022-03-19 12:28:11 +08:00 via Android
    你这不叫变量,叫配置项吧,配置项当然不可以重复了,静态编译的话或许可以考虑直接 include 对方头文件试试看
    xQmQ
        2
    xQmQ  
    OP
       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
        3
    xQmQ  
    OP
       2022-03-19 12:54:20 +08:00
    @sujin190 忘 @了不好意思
    dndx
        4
    dndx  
       2022-03-19 15:16:22 +08:00
    变量名都是全局唯一的,别的模块已经用了这个名字,你别跟别人用一摸一样的名字啊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5614 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 01:42 · PVG 09:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.