Captcha - No Caching?
Maxim Dounin
mdounin at mdounin.ru
Fri Jul 15 12:29:39 UTC 2011
Hello!
On Fri, Jul 15, 2011 at 02:15:58PM +0200, Maik Unger wrote:
> Hello Everybody,
>
> I have a Caching problem with any captcha pictures in nginx.
>
> HTTP-Header: GET /index.php?eID=sr_freecap_captcha&id=650
>
> How can I tell nginx, that he will not caching this request, when there
> is the following string:
>
> eID=sr_freecap_captcha
Correct solution is to tell it via headers in response. It's up
to backend to know if response may be cached or not.
> Config:
>
> set $captcha_caching 1;
> if ($arg_eID ~ 'sr_freecap_captcha')
> {
> set $captcha_caching 0;
> }
>
> if ($captcha_caching = 0)
> {
> break;
> }
>
> What is wrong with this config above?
This config isn't expected to do anything with cache. If you want
to disable cache based on particular condition, you have the
following options:
1. Process such requests in another location block. E.g.
location = /index.php {
error_page 418 = @nocache;
if ($arg_eID = 'sr_freecap_captcha') {
return 418;
}
proxy_pass ...
proxy_cache ...
}
location @nocache {
# ... no proxy_cache here
proxy_passs ...
}
2. Use proxy_no_cache and proxy_cache_bypass directive. E.g.
location = /index.php {
set $nocache 0;
if ($arg_eID = 'sr_freecap_captcha') {
set $nocache 1;
}
proxy_pass ...
proxy_cache ...
proxy_cache_bypass $nocache;
proxy_no_cache $nocache;
}
Please note that 2nd aproach may have problems in case of more
"if"s used for other reasons (config as shown above should be ok),
see http://wiki.nginx.org/IfIsEvil.
Maxim Dounin
More information about the nginx
mailing list