ngx_lua location capture issue

agentzh agentzh at gmail.com
Thu Oct 20 00:43:46 UTC 2011


On Thu, Oct 20, 2011 at 2:10 AM, Nginx User <nginx at nginxuser.net> wrote:
>> I think I've already fixed this issue in the ngx_lua v0.3.1rc17 release:
>>
>>    https://github.com/chaoslawful/lua-nginx-module/tags
>>
>> There was a bug in ngx.exec()'s handling when being used within
>> rewrite_by_lua* and access_by_lua* directives, which could cause
>> hanging in certain extreme conditions.
>>
>> Could you please try it out on your side?
>
> I'll have a go in due course. I have dumped the config originally
> posted. Will look into reconfiguring along those lines later.
>

Cool :)

> In the meantime, can you help out with my fallback?
>
> I have a set of about 70 regexes that are run using access_by_lua_file
> after finding out that access_by_lua has a string length limit
> (undefined).
>

It is the nginx config file parser has a length limit on individual
config directives. Use access_by_lua_file instead to put your Lua code
into an external .lua file and thus eliminating the length constraint
altogether.

> I have applied the escaping sequences and they generally work  but
> these ones generate errors:
>
> -- 42
>       -- original
> "(?:"\s*or\s*"?\d)|(?:\\x(?:23|27|3d))|(?:^.?"$)|(?:(?:^["\\]*(?:[\d"]+|[^"]+"))+\s*(?:n?and|x?or|not|\|\||\&\&)\s*[\w"[+&!@(),.-])|(?:[^\w\s]\w+\s*[|-]\s*"\s*\w)|(?:@\w+\s+(and|or)\s*["\d]+)|(?:@[\w-]+\s(and|or)\s*[^\w\s])|(?:[^\w\s:]\s*\d\W+[^\w\s]\s*".)|(?:\Winformation_schema|table_name\W)"
>       local query_string =
> ngx.re.match(ngx.var.request_uri,"(?:"\\\s*or\\\s*"?\\\d)|(?:\\\\\\x(?:23|27|3d))|

A rule of thumb is that "\" should become "\\\\" (four back-slashes!)
while using access_by_lua and "\\" (two back-slashes!) while using
access_by_lua_file. You're writing things like "\\\s" (three
back-slashes!), which is weird.

Why not put your Lua code into an external .lua file and use
access_by_lua_file or rewrite_by_lua_file instead? That way you only
need to escape each "\" only once.

Regards,
-agentzh



More information about the nginx mailing list