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
|