Hello! On Wed, Oct 16, 2013 at 09:25:19PM +0400, Ruslan Ermilov wrote:
[...] > > В документации на rewrite: > > http://nginx.org/en/docs/http/ngx_http_rewrite_module.html не нашел явное > > указание на то, что директивы этого модуля выполняются до модулей > > access-фазы > > (ngx_http_access_module,ngx_http_auth_basic_module, > > ngx_http_auth_request_module). > > > > Если знать внутреннюю архитектуру nginx то это очевидно, но прочитав только > > документацию на ngx_http_rewrite_module и ngx_http_access_module догадаться > > будет сложно. > > То, что в описанном тобой случае директива access "не выполняется", > можно понять, прочитав раздел "Внутреннее устройство", нюанс про > директиву limit_rate. IMHO, и из последовательности обработки директив в самом начале описания модуля - тоже понятно, что до выполнения директив модуля rewrite - location не выбран, и директивы модуля access не имеют шанса примениться до rewrite'ов. С другой стороны - никто не мешает построить систему, в которой между find config и location rewrite стоит проверка access, и тогда та же схема - лишь слегка отличается от реальности (а от реальности она и сейчас слегка отличается, т.к. могут быть ещё и 3rd party модули в rewrite-фазе), но allow/deny работают до return. Не будут работать всякие другие вещи, но это уже детали. [...] > Надо донести мысль о том, что rewrite (включая ВСЕ его директивы) - > это процесс поиска location'а. При обработке запроса сначала выполняется > поиск location'а по URI, затем выполняются директивы модуля rewrite (и > только они!) для данного location'а (*), в рез-те location может измениться, > процесс повторяется. Также в процессе поиска location'а выполнение > запроса может и вовсе завершиться (return, rewrite redirect). > И лишь потом, когда найден конечный location, "выполняются" остальные > директивы, включая access-модули. Да-да, как-то так. [...] > Возможно достаточно будет переформулировать это так: > > < Директивы модуля ngx_http_rewrite_module обрабатываются в следующем > порядке: > > > Обработка запроса начинается с выполнения директив модуля > > ngx_http_rewrite_module. > > Директивы обрабатываются в следующем порядке: Предлагаемое изменение - неверно, т.к. даже до серверных rewrite'ов есть как минимум одна фаза обработки запроса, не говоря уже о всяких явных вещах и 3rd party модулях в rewrite-фазе. Ну и вышеописанный теоретический вариант тактовки описанной схемы работы как приблизительной, с выполнением access-фазы между find config и rewrite - не исключает. -- Maxim Dounin http://nginx.org/en/donation.html _______________________________________________ nginx-ru mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-ru
