| From | Sent On | Attachments |
|---|---|---|
| David Yu | Jul 21, 2011 7:17 am | |
| Igor Sysoev | Jul 21, 2011 7:43 am | |
| David Yu | Jul 21, 2011 7:53 am | |
| David Yu | Jul 21, 2011 7:55 am | |
| Igor Sysoev | Jul 21, 2011 11:09 am | |
| David Yu | Jul 21, 2011 6:23 pm |
| Subject: | Re: Same regex caching | |
|---|---|---|
| From: | David Yu (davi...@gmail.com) | |
| Date: | Jul 21, 2011 6:23:10 pm | |
| List: | ru.sysoev.nginx | |
On Fri, Jul 22, 2011 at 2:10 AM, Igor Sysoev <ig...@sysoev.ru> wrote:
On Thu, Jul 21, 2011 at 10:53:51PM +0800, David Yu wrote:
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; }
Since I'll literally have hundreds of fields using the same regex, this might help?
I do not understand the issue.
map $map_arg_time $map_regex_time { ~/(\d\d):(\d\d):(\d\d)/ 1; }
location /foo { set $map_arg_time $arg_time if ( !$map_regex_time ) return { 400; }
set_form_input $map_arg_time time_finished; if ( !$map_regex_time ) return { 400; }
}
Since I'll literally have hundreds of fields using the same regex for validation, this might help? If there are better ways to do validation, please do tell.
Cheers
-- Igor Sysoev
_______________________________________________ nginx mailing list ngi...@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx
-- When the cat is away, the mouse is alone. - David Yu
_______________________________________________ nginx mailing list ngi...@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx





