Hello!
2013/8/22 逆雪寒:
> 通过 ngx.var.fastcgi_script_name 是nil 。 但 set $fsn $fastcgi_script_name 然后
> ngx.var.fsn 就能正常获取了。bug ? 还是我理解问题.
>
这是 Nginx 标准的 ngx_fastcgi 模块的一个限制。$fastcgi_script_name 这个内建变量是这个
ngx_fastcgi 模块定义的,而且在定义时设置了 NGX_HTTP_VAR_NOHASH 这个标志位,从而阻止了 Perl、Lua
等各种脚本语言在请求时按变量名动态获取这个变量的值。
之所以你使用 set 指令进行过渡就可以工作是因为 set 指令定位 $fastcgi_script_name 这个变量是在配置加载时,而不是请求时。
你可以自己修改 Nginx 源码树中的 src/http/modules/ngx_http_fastcgi_module.c 这个文件,从
ngx_http_fastcgi_vars 这个全局数组的初始化定义中把 NGX_HTTP_VAR_NOHASH 这个标志去除。
从 ngx_lua 模块的角度,是没办法绕过 Nginx 核心中的这个限制的。关于类似这样的问题,可以参见下面这个讨论:
http://forum.nginx.org/read.php?29,239402,239402,quote=1
最后,请在发贴前先加入本邮件列表,否则你的邮件总是需要人工审核才能发布。加入的办法是:发送空白邮件到地址
openresty+subscribe@googlegroups.com 即可完成订阅。
Regards,
-agentzh