Вложенныедирективыилиобъединениеусловий

Igor Sysoev is at rambler-co.ru
Wed Apr 16 19:50:12 MSD 2008


On Wed, Apr 16, 2008 at 08:55:13PM +0800, Larry Gingras wrote:

> On Wednesday 16 April 2008 20:28, Andrey Ignatov wrote:
> > On Wed, Apr 16, 2008 at 11:57:17AM +0000, Larry Gingras wrote:
> > > Переписываю очень сложную и навороченную конфигурацию apache под nginx
> > > (для реализации связки nginx+apache).
> > > И вот например мне нужно тут в одной штуке нужно проверить несколько
> > > условий. В apache я просто писал несколько RewriteCond подряд. Тут в
> > > одном if несколько условий поставить нельзя. И, как оказалось, вложенные
> > > if не поддерживаются тоже. Так что же делать в таком случае?
> > > Вот один из примеров, который не знаю как расписать правильно:
> > > if ($request_uri ~* \.(jpg|gif|wmv|flv)$) {
> > > 	if ($request_uri !~ ^/webmasters/) {
> > > 		if($invalid_referer) {
> > > 			return 403;
> > > 		}
> > > 	}
> > > }
> >
> > Можно попробовать что-нибудь в таком духе:
> >
> > if ($request_uri ~* \.(jpg|gif|wmv|flv)$) {
> > 	set $i  "a";
> > }
> >
> > if ($request_uri !~ ^/webmasters/) {
> > 	set $i  "a$i"
> > }
> >
> > if ($invalid_referer) {
> > 	set $i  "a$i"
> > }
> >
> > if ($i = "aaa") {
> > 	return 403;
> > }
> >
> > Не красиво, но др. вариантов не знаю.
> Вот это я думаю наиболее изящное и хорошее решение
> Потому что мне тут предлагают разбивать всё на отдельные локейшены, а учитывая 
> что там помимо этого примера ещё мама не горюй таких вещей, то там ужас что 
> было бы. А с таким подходом очень много локейшенов удастся сэкономить.

Это не изящное решение, а кошмраное. Если в условиях используется
$request_uri, то это прямой кандидат в location.
Правильное и масштабирумое с точки зрения последующего развития
конфигурации решение предложил Roxis.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list