Question about nested locations / PHP.

Maxim Dounin mdounin at
Sat Mar 10 21:15:58 UTC 2012


On Fri, Mar 09, 2012 at 10:12:45PM +0000, Adrian Hayter wrote:

> Not sure if this is the right place to post this; apologies in 
> advance if it is!
> I'm having a bit of trouble with nested locations and PHP. I 
> have a setup where I want all PHP files to go through fastcgi, 
> and have an expiry of epoch. However, one particular PHP file is 
> used to generate CSS stylesheets, and I want this file to have 
> an expiry of 30 days. My current code looks like this:
> location ~ \.php$
> {
> 	location ~ /css.php
> 	{
> 		expires 30d;
> 		add_header Pragma public;
> 		add_header Cache-Control "public";
> 	}
> 	expires epoch
> 	// Fastcgi stuff...
> }
> I've tried various combinations (having the nested location at 
> the end, etc) but all that happens is the css.php file doesn't 
> get sent through the fastcgi process, and the raw PHP code is 
> sent to the client. I've messed up somewhere, and I'm new to 
> nginx (just migrated from Apache) so if someone could point out 
> my error / give a quick explanation of how nested locations 
> work, it would be ideal!

You have to define the "fastcgi_pass" directive in both locations 
for this to work.

And, as Cliff already suggested, you don't really need nested 
locations here, it's better to define exact location for 
/css.php, i.e. something like this:

    location = /css.php {
        expires 30d;
        fastcgi_pass ...

    location ~ \.php$ {
        expires epoch;
        fastcgi_pass ...

Maxim Dounin

More information about the nginx mailing list