Nginx | fastcgi_cache_valid dynamic based on request
Maxim Dounin
mdounin at mdounin.ru
Fri Aug 26 15:36:23 UTC 2016
Hello!
On Fri, Aug 26, 2016 at 11:01:05AM -0400, c0nw0nk wrote:
> So I have been trying to make the fastcgi_cache_valid value based on user
> request.
>
> if ($request_uri ~ "/url1" ) {
> set $cachetime "any 5s";
> }
> if ($request_uri ~ "/url2" ) {
> set $cachetime "any 5m";
> }
>
> These did not work because it turns out your not allowed to have a dynamic
> variable within the fastcgi_cach_valid command.
> fastcgi_cache_valid $cachetime;
Exactly, the fastcgi_cache_valid doesn't support variables and
that's why it won't work.
> So instead of the above i tried this instead.
>
> if ($request_uri ~ "/url1" ) {
> set $cachetime "5";
> }
> if ($request_uri ~ "/url2" ) {
> set $cachetime "300";
> }
> add_header "X-Accel-Expires" $cachetime;
>
> fastcgi_cache_valid any 60s;
>
> But on url1 i get X-Cache: HIT when it should of expired after 5 seconds.
For X-Accel-Expires to work, it must be from an upstream server.
That is, using add_header will work if done on your backend, but
not in the nginx caching configuration.
> Is what i am trying to achieve even possible ? From my understand the
> X-Accel-Expires might just be for proxy_cache requests.
Use separate locations instead, i.e.:
location /url1 {
fastcgi_cache_valid any 5s;
...
}
location /url2 {
fastcgi_cache_valid any 5m;
...
}
Locations were specifically designed to make distinct URI-based
configurations easy and efficient.
--
Maxim Dounin
http://nginx.org/
More information about the nginx
mailing list