# HG changeset patch # User Piotr Sikora <piotrsik...@google.com> # Date 1489618489 25200 # Wed Mar 15 15:54:49 2017 -0700 # Node ID 068381014f256ad6e2dc490bacc2529cebbb0462 # Parent 96075d4cd2a6e8bd67caf1d7b78f8e87d757c48d Proxy: always emit "Host" header first.
Signed-off-by: Piotr Sikora <piotrsik...@google.com> diff -r 96075d4cd2a6 -r 068381014f25 src/http/modules/ngx_http_proxy_module.c --- a/src/http/modules/ngx_http_proxy_module.c +++ b/src/http/modules/ngx_http_proxy_module.c @@ -3422,7 +3422,7 @@ ngx_http_proxy_init_headers(ngx_conf_t * uintptr_t *code; ngx_uint_t i; ngx_array_t headers_names, headers_merged; - ngx_keyval_t *src, *s, *h; + ngx_keyval_t *host, *src, *s, *h; ngx_hash_key_t *hk; ngx_hash_init_t hash; ngx_http_script_compile_t sc; @@ -3454,11 +3454,33 @@ ngx_http_proxy_init_headers(ngx_conf_t * return NGX_ERROR; } + h = default_headers; + + if (h->key.len != sizeof("Host") - 1 + || ngx_strcasecmp(h->key.data, (u_char *) "Host") != 0) + { + return NGX_ERROR; + } + + host = ngx_array_push(&headers_merged); + if (host == NULL) { + return NGX_ERROR; + } + + *host = *h++; + if (conf->headers_source) { src = conf->headers_source->elts; for (i = 0; i < conf->headers_source->nelts; i++) { + if (src[i].key.len == sizeof("Host") - 1 + && ngx_strcasecmp(src[i].key.data, (u_char *) "Host") == 0) + { + *host = src[i]; + continue; + } + s = ngx_array_push(&headers_merged); if (s == NULL) { return NGX_ERROR; @@ -3468,8 +3490,6 @@ ngx_http_proxy_init_headers(ngx_conf_t * } } - h = default_headers; - while (h->key.len) { src = headers_merged.elts; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel