atom feed6 messages in ru.sysoev.nginxRe: Same regex caching
FromSent OnAttachments
David YuJul 21, 2011 7:17 am 
Igor SysoevJul 21, 2011 7:43 am 
David YuJul 21, 2011 7:53 am 
David YuJul 21, 2011 7:55 am 
Igor SysoevJul 21, 2011 11:09 am 
David YuJul 21, 2011 6:23 pm 
Subject:Re: Same regex caching
From:David Yu (davi@gmail.com)
Date:Jul 21, 2011 7:55:08 am
List:ru.sysoev.nginx

On Thu, Jul 21, 2011 at 10:43 PM, Igor Sysoev <ig@sysoev.ru> wrote:

On Thu, Jul 21, 2011 at 10:18:06PM +0800, David Yu wrote:

Hi,

I wanted to ask if the same regex used in multiple conditions is the same cached-compiled version? Eg I need to validate the all the (sub)request params before sending it upstream:

location /foo {

if ($time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; } if ($arg_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }

}

#note that in the real app, I'll have lots of repeated regex for email, phone, used in every if directive

location /bar {

if ($arg_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; } set_form_input $form_time time_finished; if ($form_time !~ /(\d\d):(\d\d):(\d\d)/) { return 400; }

What I'm trying to do is send the params to redis with its lua scripting engine handling the *pre-validated* request. Redis is single-process while nginx can have multiple workers ... so its only fitting to let nginx do validation for redis :-)

No, each regex is compiled separately.

Thanks for the quick reply. I'm thinking maybe the nginx map can act as the regex cache for the same ones.

set $map_regex_time $arg_time if (!$map_regex_time) { return 400; }

set_form_input $map_regex_time time_finished; if (!$map_regex_time) { return 400; }

Oops. Copy-paste err

Since I'll literally have hundreds of fields using the same regex, this might help?