Forum: NGINX Different cache time for different locations

Posted by Nuno Neves (Guest)
on 2012-08-31 18:46
(Received via mailing list)
Hello,

All my requests passes in the php location to fastcgi ( location ~
\.php$ ) and I would like to have different cache time for different
requests.

As an example :

/ -> cache time for 10 minutes
/about -> cache time for 1 day
/products -> cache time for 1h

Right now I have the same cache for all requests: fastcgi_cache_valid
200 302  10m;

How am I able to accomplish this setup?

Thanks

Nuno
Posted by Maxim Dounin (Guest)
on 2012-08-31 19:08
(Received via mailing list)
Hello!

On Fri, Aug 31, 2012 at 05:46:02PM +0100, Nuno Neves wrote:

> /products -> cache time for 1h
>
> Right now I have the same cache for all requests: fastcgi_cache_valid
> 200 302  10m;
>
> How am I able to accomplish this setup?

Configure different locations to handle different requests, for
example

   location = / {
       fastcgi_pass ...
       fastcgi_cache_valid 10m;
       ...
   }

   location = /about {
       fastcgi_pass ...
       fastcgi_cache_valid 1d;
       ...
   }

   location = /products {
       fastcgi_pass ...
       fastcgi_cache_valid 1h;
       ...
   }

Maxim Dounin
Posted by Nuno Neves (Guest)
on 2012-09-20 23:35
(Received via mailing list)
Hello

2012/8/31 Maxim Dounin <mdounin@mdounin.ru>:
>> As an example :
> Configure different locations to handle different requests, for
>        fastcgi_cache_valid 1d;
>        ...
>    }
>
>    location = /products {
>        fastcgi_pass ...
>        fastcgi_cache_valid 1h;
>        ...
>    }
>
> Maxim Dounin

I've tested this configuration, but since all php requests pass in (
location ~ \.php$ ) and all requests are sent to /index.php with
try_files, this doesn't work.

For example, all requests to /products are handle with /index.php with 
try_files

location / {
  try_files $uri $uri/ /index.php;
}

location ~ \.php$ {
  fastcgi_pass ...
  fastcgi_cache one;
  fastcgi_cache_valid 200 20m;
  ....
}

If I add:

location = /products {
  fastcgi_pass ...
  fastcgi_cache_valid 1h;
   ...
}

A request to /products get the value from .php location (
fastcgi_cache_valid 200 10m; )
If I remove  fastcgi_cache_valid from .php location, all requests I
get are MISS.

Any ideas to accomplished this?

Thanks
Posted by "António P. P. Almeida" <appa@perusio.net> (Guest)
on 2012-09-20 23:56
(Received via mailing list)
On 20 Set 2012 23h29 CEST, nfnlists@gmail.com wrote:

>>> \.php$ ) and I would like to have different cache time for
>>>
>>
>> }
> location / {
> try_files $uri $uri/ /index.php;
> }
>
> location ~ \.php$ {
> fastcgi_pass ...
> fastcgi_cache one;
> fastcgi_cache_valid 200 20m;
> ....
> }

Why do you use an insecure config? It's even referenced in the wiki:
http://wiki.nginx.org/Pitfalls#Passing_Uncontrolle...

I'm aware that is quite common to "recommend" this as de rigueur for
PHP but I fail to see why, It seems that is just easier to have a
catch all php than enumerate all scripts that are allowed.

Maxim suggestion doesn't work for you because you have this regex
based location. I suggest you formulate your problem more clearly so
that the list can help you.

Start by trying an exact location for index.php

location = /index.php {
    ...
}

location = /products {
     ...
}

You have to "enable" PHP FCGI handling in each location.

--- appa
Posted by Nuno Neves (Guest)
on 2012-09-21 15:41
(Received via mailing list)
Hello,

That's the way applications like wordpress and others works, in my
case it's Invision Power Board.

Thanks anyway.

Nuno

2012/9/20 Antnio P. P. Almeida <appa@perusio.net>:
Posted by "António P. P. Almeida" <appa@perusio.net> (Guest)
on 2012-09-21 18:45
(Received via mailing list)
On 21 Set 2012 15h40 CEST, nfnlists@gmail.com wrote:

> Hello,
>
> That's the way applications like wordpress and others works, in my
> case it's Invision Power Board.

With WP you can enumerate all PHP files and even if you don't want to
do that you can constrain the execution by using something like this:


        ## Regular PHP processing.
        location ~ ^(?<script>.+\.php)(?<path_info>.*)$ {
            include fastcgi.conf;
            ## The fastcgi_params must be redefined from the ones
            ## given in fastcgi.conf. No longer standard names
            ## but arbitrary: named patterns in regex.
            fastcgi_param SCRIPT_FILENAME $document_root$script;
            fastcgi_param SCRIPT_NAME $script;
            fastcgi_param PATH_INFO $path_info;
            ## Passing the request upstream to the FastCGI
            ## listener.
            fastcgi_pass phpcgi;
        }

--- appa
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.