[PATCH 10 of 14] Proxy: always emit "Host" header first

Piotr Sikora piotrsikora at google.com
Thu Jun 22 20:33:14 UTC 2017


# HG changeset patch
# User Piotr Sikora <piotrsikora at 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 <piotrsikora at 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;


More information about the nginx-devel mailing list