Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx-0.7.1
Hello!
On Thu, May 29, 2008 at 01:17:56AM +0400, proforg wrote:
Игорь, видимо наткнулся на изменение поведения locations,
но понять в чём дело как то пока не могу.
[...]
Сломались все rewrite внутри вложенных location'ов (включая
неявные, созданные с помощью if), которые должны были приводить к
повторному поиску совпадения uri и location'а.
Воспроизводится в 0.7.1 вот на таком конфиге:
location /blah {
if ($args ~ "xxx") {
rewrite . /click last;
}
}
location /click {
return 502;
}
После срабатывания rewrite не происходит поиска нового location'а
(точнее - происходит, но только по последнему уровню вложенности)
и запрос остаётся в том же location'е что и был, в результате
возвращается 404.
Прилагаемый патч проблему исправляет.
Maxim Dounin
# HG changeset patch
# User Maxim Dounin <mdounin@xxxxxxxxxx>
# Date 1212762229 -14400
# Node ID a4d059c8ab11979ea677bf35c9345e9ab5b71789
# Parent 9d9dad60269f80f69e83636f2324903e45b77152
Fix rewrite in nested locations.
Reset request's loc_conf to in ngx_http_core_find_config_phase() to default.
Without these ngx_http_core_find_location() will reuse old r->loc_conf and
will not be able to find correct location if request came from rewrite in
nested location (including implicit ones created by 'if').
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -773,9 +773,14 @@ ngx_http_core_find_config_phase(ngx_http
size_t len;
ngx_int_t rc;
ngx_http_core_loc_conf_t *clcf;
+ ngx_http_core_srv_conf_t *cscf;
r->content_handler = NULL;
r->uri_changed = 0;
+
+ cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
+
+ r->loc_conf = cscf->ctx->loc_conf;
rc = ngx_http_core_find_location(r);
|