diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_core_module.c | 1 | ||||
-rw-r--r-- | src/http/ngx_http_header_filter_module.c | 32 | ||||
-rw-r--r-- | src/http/ngx_http_request.c | 1 | ||||
-rw-r--r-- | src/http/ngx_http_request.h | 1 |
4 files changed, 27 insertions, 8 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index bf5d48390..34dafaac6 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -2061,7 +2061,6 @@ ngx_http_subrequest(ngx_http_request_t *r, c->data = sr; } - sr->port = r->port; sr->port_text = r->port_text; sr->variables = r->variables; diff --git a/src/http/ngx_http_header_filter_module.c b/src/http/ngx_http_header_filter_module.c index f9476c695..0a5615475 100644 --- a/src/http/ngx_http_header_filter_module.c +++ b/src/http/ngx_http_header_filter_module.c @@ -155,12 +155,17 @@ ngx_http_header_filter(ngx_http_request_t *r) size_t len; ngx_str_t host; ngx_buf_t *b; - ngx_uint_t status, i; + ngx_uint_t status, i, port; ngx_chain_t out; ngx_list_part_t *part; ngx_table_elt_t *header; + ngx_connection_t *c; ngx_http_core_loc_conf_t *clcf; ngx_http_core_srv_conf_t *cscf; + struct sockaddr_in *sin; +#if (NGX_HAVE_INET6) + struct sockaddr_in6 *sin6; +#endif u_char addr[NGX_SOCKADDR_STRLEN]; r->header_sent = 1; @@ -297,13 +302,29 @@ ngx_http_header_filter(ngx_http_request_t *r) } } + c = r->connection; + + switch (c->local_sockaddr->sa_family) { + +#if (NGX_HAVE_INET6) + case AF_INET6: + sin6 = (struct sockaddr_in6 *) c->local_sockaddr; + port = sin6->sin6_port; + break; +#endif + default: /* AF_INET */ + sin = (struct sockaddr_in *) c->local_sockaddr; + port = sin->sin_port; + break; + } + #if (NGX_HTTP_SSL) if (r->connection->ssl) { len += sizeof("Location: https://") - 1 + host.len + r->headers_out.location->value.len + 2; - if (clcf->port_in_redirect && r->port != 443) { + if (clcf->port_in_redirect && port != 443) { len += r->port_text->len; } @@ -314,7 +335,7 @@ ngx_http_header_filter(ngx_http_request_t *r) + host.len + r->headers_out.location->value.len + 2; - if (clcf->port_in_redirect && r->port != 80) { + if (clcf->port_in_redirect && port != 80) { len += r->port_text->len; } } @@ -322,6 +343,7 @@ ngx_http_header_filter(ngx_http_request_t *r) } else { host.len = 0; host.data = NULL; + port = 0; } if (r->chunked) { @@ -476,14 +498,14 @@ ngx_http_header_filter(ngx_http_request_t *r) if (clcf->port_in_redirect) { #if (NGX_HTTP_SSL) if (r->connection->ssl) { - if (r->port != 443) { + if (port != 443) { b->last = ngx_copy(b->last, r->port_text->data, r->port_text->len); } } else #endif { - if (r->port != 80) { + if (port != 80) { b->last = ngx_copy(b->last, r->port_text->data, r->port_text->len); } diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index 5f5c70744..bd1420043 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -300,7 +300,6 @@ ngx_http_init_request(ngx_event_t *rev) port = c->listening->servers; - r->port = port->port; r->port_text = &port->port_text; r->connection = c; diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index ab693b729..ea3c6ab7c 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -384,7 +384,6 @@ struct ngx_http_request_s { ngx_http_post_subrequest_t *post_subrequest; ngx_http_posted_request_t *posted_requests; - ngx_uint_t port; ngx_str_t *port_text; /* ":80" */ ngx_http_virtual_names_t *virtual_names; |