aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/proxy
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2005-02-09 14:31:07 +0000
committerIgor Sysoev <igor@sysoev.ru>2005-02-09 14:31:07 +0000
commitaa8286101a57f11f2c1f9b5bf2d7ec121e74beea (patch)
treed87e4d87bf388c7a3c630170d9ba43a8591007ed /src/http/modules/proxy
parent9ef28fa32a4713d365aa8d4cfc1f8732d6de47f6 (diff)
downloadnginx-aa8286101a57f11f2c1f9b5bf2d7ec121e74beea.tar.gz
nginx-aa8286101a57f11f2c1f9b5bf2d7ec121e74beea.zip
nginx-0.1.18-RELEASE importrelease-0.1.18
*) Workaround: the default values of the devpoll_events and the devpoll_changes directives changed from 512 to 32 to be compatible with Solaris 10. *) Bugfix: the proxy_set_x_var and fastcgi_set_var directives were not inherited. *) Bugfix: in the redirect rewrite directive the arguments were concatenated with URI by the "&" rather than the "?". *) Bugfix: the lines without trailing ";" in the file being included by the ngx_http_geo_module were silently ignored. *) Feature: the ngx_http_stub_status_module. *) Bugfix: the unknown log format in the access_log directive caused the segmentation fault. *) Feature: the new "document_root" parameter of the fastcgi_params directive. *) Feature: the fastcgi_redirect_errors directive. *) Feature: the new "break" modifier of the "rewrite" directive allows to stop the rewrite/location cycle and sets the current configuration to the request.
Diffstat (limited to 'src/http/modules/proxy')
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_handler.c14
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_handler.h2
-rw-r--r--src/http/modules/proxy/ngx_http_proxy_upstream.c55
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;
+ }
}