fix $server_addr for wildcard listen, the has been introduced in r2513
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 66b3cee..43d4644 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -1791,13 +1791,38 @@
ngx_int_t
ngx_http_server_addr(ngx_http_request_t *r, ngx_str_t *s)
{
- socklen_t len;
- ngx_connection_t *c;
- u_char sa[NGX_SOCKADDRLEN];
+ socklen_t len;
+ ngx_uint_t addr;
+ ngx_connection_t *c;
+ u_char sa[NGX_SOCKADDRLEN];
+ struct sockaddr_in *sin;
+#if (NGX_HAVE_INET6)
+ ngx_uint_t i;
+ struct sockaddr_in6 *sin6;
+#endif
c = r->connection;
- if (c->local_sockaddr == NULL) {
+ switch (c->local_sockaddr->sa_family) {
+
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
+ sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
+
+ for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
+ addr |= sin6->sin6_addr.s6_addr[i];
+ }
+
+ break;
+#endif
+
+ default: /* AF_INET */
+ sin = (struct sockaddr_in *) c->local_sockaddr;
+ addr = sin->sin_addr.s_addr;
+ break;
+ }
+
+ if (addr == 0) {
len = NGX_SOCKADDRLEN;