allow/deny and return
Gena Makhomed
gmm at csdoc.com
Tue Oct 15 16:14:22 UTC 2013
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