Passing request directly to named location

Igor Sysoev igor at sysoev.ru
Fri Feb 11 13:24:15 MSK 2011


On Fri, Feb 11, 2011 at 05:08:40AM -0500, Dayo wrote:
> Hello all.
> 
> I currently have my php set up as so
> 
> [code]
> ...
> 	location ~ \..*/.*\.php$ {
> 		return 403;
> 	}
> 	location ~* ^.+\.php$ {
> 		try_files $uri/fail @proxy;
> 	}
> 	location @proxy {
> 		proxy pass etc
> 	}
> 	location
> some-location-that-sometimes-needs-rewriting-in-apache-htaccess {
> 		try_files $uri $uri/ @proxy;
> 	}
> ...
> [/code]
> 
> Is there a way where when a '.php' file is equested, I just pass the
> request to the '@proxy' location.
> 
> Now I have to use '$uri/fail' (a location that will never be found) so
> that it will fail and then go to the '@proxy' location.
> 
> I see the time spent determining that '$uri/fail' does not exist to be a
> waste but I can't do 'try_files @proxy' directly.
> 
> An option at also works is ... 
> 
> [code]
> ...
> 	location ~* ^.+\.php$ {
> 		error_page 403 = @proxy;
> 		return 403;
> 	}
> ...
> [/code]
> 
> Just wondering which is more efficient.

The one and single efficient and scaleable way is to define explictly
how do you want to handle location, that is:

 	location ~* ^.+\.php$ {
		# BTW, what does this hack mean ???
		location ~ \..*/.*\.php$ {
	 		return 403;
	 	}

 		proxy_pass  ...
 	}

The lesser you have dependences, the lesser you will have maintence
issues in future. Yes, you have to write more, but you see what
how exactly this location is handled. If you ever need to change
proxied server address, your favourite editor with find/replace
functionality is your friend.


-- 
Igor Sysoev
http://sysoev.ru/en/



More information about the nginx mailing list