Different cache time for different locations

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

Hello!

On Fri, Aug 31, 2012 at 05:46:02PM +0100, Nuno N. 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 D.

Hello

2012/8/31 Maxim D. [email protected]:

As an example :
Configure different locations to handle different requests, for
fastcgi_cache_valid 1d;

}

location = /products {
fastcgi_pass …
fastcgi_cache_valid 1h;

}

Maxim D.

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

On 20 Set 2012 23h29 CEST, [email protected] 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:

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

On 21 Set 2012 15h40 CEST, [email protected] 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

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 [email protected]: