aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_parse.c2
-rw-r--r--src/http/ngx_http_request.c11
-rw-r--r--src/http/ngx_http_variables.c17
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;