ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: allow/deny and return



On 15.10.2013 16:45, Maxim Dounin wrote:

В такой конфигурации:

location /closed {
   allow 10.1.1.1;
   deny all;
   return 200 "secret\n";
}

allow/deny ни на что не влияют.
...
я прочитал http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
но так и не смог понять, почему allow и deny тут не будут работать.

Потому что директивы модуля rewrite - это фактически часть выбора
конфигурации.  И именно от выбранной конфигурации зависит, что
можно, а что - нельзя.

вот дословно что сейчас написано в документации:

The ngx_http_rewrite_module module is used to change URIs using regular
expressions, return redirects, and conditionally select configurations.

"conditionally select configurations" - это только evil директива "if".
остальные директивы, кроме rewrite, являются unconditional. разве нет?

это все похоже на BUG, потому что пользователи обычно подразумевают,
что сначала работает access module и только потом - rewrite_module.

по крайней мере, в UNIX и даже в WINDOWS все работает именно так:
если доступа к файлу нет, никаких операций с ним сделать нельзя.

В Антоном конфиге нет файла.  Есть инструкция "при выборе
конфигурации для обработки запросов вернуть ответ с кодом 200".

файла нет. но есть location /closed и есть директивы задания доступа
кому allow, а кому deny. то что return срабатывает раньше deny - это
будет совершенно неожиданно для более чем 99% пользователей nginx...

(И да, я таки считаю, что возможность задавать тело ответа была
добавлена в диркетиву return зря, не её это работа.  Надо было
сделать отдельный модуль a la empty gif, подобных вопросов было бы
меньше.  Но таки этот фарш уже поздно проворачивать назад.)

почему поздно? и сейчас можно сделать отдельный модуль return, который
будет срабатывать как content handler возвращая код статуса и урл/текст

return code [text];
return code URL;
return URL;

а из модуля rewrite директиву return тогда можно будет вообще убрать.
в этом случае - вообще ничего не изменится, кроме того, что директивы
из access module отработают раньше, чем return, как это и должно быть.

P.S. есть такая книга "Безумно просто. Вдохновляющие примеры Apple"
http://www.mann-ivanov-ferber.ru/books/paperbook/bezumno-prosto/
см. "Отрывки из книги, [PDF] Введение. Посох Простоты 113 КБ".

из рецензии:

?Простота всегда в моде?, ? говорит автор книги Кен Сигал. ?Бизнес тенденции приходят и уходят, но простота остается всегда. Предпочтение простоте заложено в нашей ДНК и это вряд ли изменится в течение нескольких миллиардов лет.

Организации, которые понимают это могут превратить простоту в конкурентное преимущество. Поэтому, что это просто жизненный факт: при наличие выбора, человек всегда выберет более простой путь. Внутри огранизации простота экономит время и деньги, создает лучшие условия работы и поднимает боевой дух. Совсем не плохо для концепции, которая не стоит ни копейки?.

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.