NGINX不评估variables?

我有一个以下的nginxconfiguration:

http { (...) limit_conn_zone $binary_remote_addr zone=limitapinoauth:16m; limit_conn_zone $remote_user zone=limitapi:32m; map $remote_user $zone { default 'limitapi'; '' 'limitapinoauth'; } map $zone $num { 'limitapi' 100; default 200; } server { listen 80 default; root /var/www/example.com/public_html; limit_conn $zone $num; } (...) } 

预期的行为是映射variables被评估为在最后一行使用,但它们不是。 任何想法为什么?

我得到以下错误:

 nginx: [emerg] invalid number of connections "$num" 

当我将$ num更改为整数(即​​200)时,错误是:

 nginx: [emerg] zero size shared memory zone "$zone" 

如果我把最后一行改为:

 limit_conn limitapi 100; 

configuration是正确的。

ngx_http_map_module map指令文档中没有明确说明,它只说:

创build一个新的variables,其值取决于第一个参数中指定的一个或多个源variables的值。

我猜想由于ngx_http_map_module工作在模块上下文中 ngx_http_map_create_conf (当创build主configuration时),并且所有索引variables在预configuration期间被添加 ,所以只有内置variables可以被用作map指令的源variables。 (Nginx大师,请确认。)

此外,我找不到任何使用由map指令定义的variables作为另一个map指令中的源variables的示例,这表示相同。 因此,我build议直接基于$remote_uservariables创buildvariables$zone$num

 map $remote_user $zone { default 'limitapi'; '' 'limitapinoauth'; } map $remote_user $num { default 100; '' 200; }