diff options
Diffstat (limited to 'src/http/modules/proxy')
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_handler.c | 14 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_handler.h | 2 | ||||
-rw-r--r-- | src/http/modules/proxy/ngx_http_proxy_upstream.c | 55 |
3 files changed, 42 insertions, 29 deletions
diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.c b/src/http/modules/proxy/ngx_http_proxy_handler.c index a195b45e4..d213d6929 100644 --- a/src/http/modules/proxy/ngx_http_proxy_handler.c +++ b/src/http/modules/proxy/ngx_http_proxy_handler.c @@ -1284,6 +1284,10 @@ static char *ngx_http_proxy_merge_loc_conf(ngx_conf_t *cf, ngx_conf_merge_value(conf->lm_factor, prev->lm_factor, 0); ngx_conf_merge_sec_value(conf->default_expires, prev->default_expires, 0); + if (conf->x_vars == NULL) { + conf->x_vars = prev->x_vars; + } + return NULL; } @@ -1389,10 +1393,10 @@ static char *ngx_http_proxy_set_x_var(ngx_conf_t *cf, ngx_command_t *cmd, ngx_http_variable_t *var; ngx_http_core_main_conf_t *cmcf; - if (lcf->x_vars.elts == NULL) { - if (ngx_array_init(&lcf->x_vars, cf->pool, 4, - sizeof(ngx_http_variable_t *)) == NGX_ERROR) - { + if (lcf->x_vars == NULL) { + lcf->x_vars = ngx_array_create(cf->pool, 4, + sizeof(ngx_http_variable_t *)); + if (lcf->x_vars == NULL) { return NGX_CONF_ERROR; } } @@ -1405,7 +1409,7 @@ static char *ngx_http_proxy_set_x_var(ngx_conf_t *cf, ngx_command_t *cmd, for (i = 0; i < cmcf->variables.nelts; i++) { if (ngx_strcasecmp(var[i].name.data, value[1].data) == 0) { - if (!(index = ngx_array_push(&lcf->x_vars))) { + if (!(index = ngx_array_push(lcf->x_vars))) { return NGX_CONF_ERROR; } diff --git a/src/http/modules/proxy/ngx_http_proxy_handler.h b/src/http/modules/proxy/ngx_http_proxy_handler.h index 28d7971df..f950258dc 100644 --- a/src/http/modules/proxy/ngx_http_proxy_handler.h +++ b/src/http/modules/proxy/ngx_http_proxy_handler.h @@ -87,7 +87,7 @@ typedef struct { ngx_path_t *cache_path; ngx_path_t *temp_path; - ngx_array_t x_vars; + ngx_array_t *x_vars; ngx_http_busy_lock_t *busy_lock; diff --git a/src/http/modules/proxy/ngx_http_proxy_upstream.c b/src/http/modules/proxy/ngx_http_proxy_upstream.c index cf5195368..e2fe01554 100644 --- a/src/http/modules/proxy/ngx_http_proxy_upstream.c +++ b/src/http/modules/proxy/ngx_http_proxy_upstream.c @@ -100,6 +100,11 @@ static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_proxy_ctx_t *p) r = p->request; uc = p->lcf->upstream; +#if (NGX_SUPPRESS_WARN) + var = NULL; + index = NULL; +#endif + if (p->upstream->method) { len = http_methods[p->upstream->method - 1].len; @@ -169,20 +174,22 @@ static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_proxy_ctx_t *p) } - cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); + if (p->lcf->x_vars) { + cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); - var = cmcf->variables.elts; - index = p->lcf->x_vars.elts; + var = cmcf->variables.elts; + index = p->lcf->x_vars->elts; - for (i = 0; i < p->lcf->x_vars.nelts; i++) { + for (i = 0; i < p->lcf->x_vars->nelts; i++) { - if (!(value = ngx_http_get_variable(r, index[i]))) { - continue; - } + if (!(value = ngx_http_get_variable(r, index[i]))) { + continue; + } - if (value->text.len) { - len += sizeof("X-") - 1 + var[index[i]].name.len + sizeof(": ") - 1 - + value->text.len + sizeof(CRLF) - 1; + if (value->text.len) { + len += sizeof("X-") - 1 + var[index[i]].name.len + + sizeof(": ") - 1 + value->text.len + sizeof(CRLF) - 1; + } } } @@ -356,26 +363,28 @@ static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_proxy_ctx_t *p) } - for (i = 0; i < p->lcf->x_vars.nelts; i++) { + if (p->lcf->x_vars) { + for (i = 0; i < p->lcf->x_vars->nelts; i++) { - if (!(value = ngx_http_get_variable(r, index[i]))) { - continue; - } + if (!(value = ngx_http_get_variable(r, index[i]))) { + continue; + } - if (value->text.len == 0) { - continue; - } + if (value->text.len == 0) { + continue; + } - *b->last++ = 'X'; *b->last++ = '-'; + *b->last++ = 'X'; *b->last++ = '-'; - b->last = ngx_cpymem(b->last, var[index[i]].name.data, - var[index[i]].name.len); + b->last = ngx_cpymem(b->last, var[index[i]].name.data, + var[index[i]].name.len); - *b->last++ = ':'; *b->last++ = ' '; + *b->last++ = ':'; *b->last++ = ' '; - b->last = ngx_cpymem(b->last, value->text.data, value->text.len); + b->last = ngx_cpymem(b->last, value->text.data, value->text.len); - *b->last++ = CR; *b->last++ = LF; + *b->last++ = CR; *b->last++ = LF; + } } |