diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_parse.c | 2 | ||||
-rw-r--r-- | src/http/ngx_http_request.c | 11 | ||||
-rw-r--r-- | src/http/ngx_http_variables.c | 17 |
3 files changed, 22 insertions, 8 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c index b9022bdce..b141000b6 100644 --- a/src/http/ngx_http_parse.c +++ b/src/http/ngx_http_parse.c @@ -260,7 +260,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) case sw_schema_slash_slash: switch (ch) { case '/': - r->host_start = p; + r->host_start = p + 1; state = sw_host; break; default: diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index 951db75e4..bbd025575 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -1385,8 +1385,15 @@ ngx_http_find_virtual_server(ngx_http_request_t *r, ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; - host = r->headers_in.host->value.data; - len = r->headers_in.host_name_len; + host = r->host_start; + + if (host == NULL) { + host = r->headers_in.host->value.data; + len = r->headers_in.host_name_len; + + } else { + len = r->host_end - host; + } if (vn->hash.buckets) { cscf = ngx_hash_find(&vn->hash, hash, host, len); diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c index 120145829..c31defc4e 100644 --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -667,13 +667,20 @@ static ngx_int_t ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { - if (r->headers_in.host) { - v->len = r->headers_in.host_name_len; - v->data = r->headers_in.host->value.data; + if (r->host_start == NULL) { + + if (r->headers_in.host) { + v->len = r->headers_in.host_name_len; + v->data = r->headers_in.host->value.data; + + } else { + v->len = r->server_name.len; + v->data = r->server_name.data; + } } else { - v->len = r->server_name.len; - v->data = r->server_name.data; + v->len = r->host_end - r->host_start; + v->data = r->host_start; } v->valid = 1; |