Proxy: made proxy_pass with variables more consistent.

If proxy_pass was used with variables and there was no URI component,
nginx always used unparsed URI.  This isn't consistent with "no variables"
case, where e.g. rewrites are applied even if there is no URI component.

Fix is to use the same logic in both cases, i.e. only use unparsed URI if
it's valid and request is the main one.
This commit is contained in:
Maxim Dounin 2011-12-23 16:04:09 +00:00
parent 5a87dab604
commit daa03354a1
1 changed files with 3 additions and 6 deletions

View File

@ -736,9 +736,6 @@ ngx_http_proxy_eval(ngx_http_request_t *r, ngx_http_proxy_ctx_t *ctx,
url.uri.len++;
url.uri.data = p - 1;
}
} else {
url.uri = r->unparsed_uri;
}
ctx->vars.key_start = u->schema;
@ -806,7 +803,7 @@ ngx_http_proxy_create_key(ngx_http_request_t *r)
return NGX_ERROR;
}
if (plcf->proxy_lengths) {
if (plcf->proxy_lengths && ctx->vars.uri.len) {
*key = ctx->vars.uri;
u->uri = ctx->vars.uri;
@ -916,7 +913,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
loc_len = 0;
unparsed_uri = 0;
if (plcf->proxy_lengths) {
if (plcf->proxy_lengths && ctx->vars.uri.len) {
uri_len = ctx->vars.uri.len;
} else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri && r == r->main)
@ -1022,7 +1019,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
u->uri.data = b->last;
if (plcf->proxy_lengths) {
if (plcf->proxy_lengths && ctx->vars.uri.len) {
b->last = ngx_copy(b->last, ctx->vars.uri.data, ctx->vars.uri.len);
} else if (unparsed_uri) {