# HG changeset patch # User Igor Sysoev # Date 1164313223 0 # Node ID 7521e5f5d5559206a5500c01ca1d6a7fe9094c9e # Parent 57cb2052dcc6d25129f24de2fde0bdcc7a12e5fb use host part in URL diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c --- 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_req 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 --- 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_re 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 --- 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;