Welcome! Log In Create A New Profile

Advanced

Re: proxied requests hang when DNS response has wrong ident

Ruslan Ermilov
July 15, 2014 07:42AM
On Tue, Jul 15, 2014 at 08:04:44PM +1000, Pramod Korathota wrote:
> We have recently discovered a very rare occurence when requests through
> nginx will hang if the resolver sends a response with a mismatching ident.
> We are seeing this in production with 1.7.1 and I have been able to
> re-produce with 1.7.3. The relevant parts of the config are:
>
> resolver 10.65.255.4;
>
> location / {
> proxy_pass http://$host.internal$request_uri;
> }

Проблема валидна. Патч какой-то такой:

# HG changeset patch
# User Ruslan Ermilov <ru@nginx.com>
# Date 1405424486 -14400
# Tue Jul 15 15:41:26 2014 +0400
# Node ID 8a16ec3871efad5990604a21c6bc00c0c9347446
# Parent abd460ece11e9c85d4c0c4a8e6ac46cfb5fa62b5
Resolver: fixed resend on malformed responses.

DNS request resend on malformed responses was broken in 98876ce2a7fd.

Reported by Pramod Korathota.

diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -1467,7 +1467,6 @@ ngx_resolver_process_a(ngx_resolver_t *r
goto failed;
}

- rn->naddrs6 = 0;
qident = (rn->query6[0] << 8) + rn->query6[1];

break;
@@ -1482,7 +1481,6 @@ ngx_resolver_process_a(ngx_resolver_t *r
goto failed;
}

- rn->naddrs = 0;
qident = (rn->query[0] << 8) + rn->query[1];
}

@@ -1507,6 +1505,8 @@ ngx_resolver_process_a(ngx_resolver_t *r

case NGX_RESOLVE_AAAA:

+ rn->naddrs6 = 0;
+
if (rn->naddrs == (u_short) -1) {
goto next;
}
@@ -1519,6 +1519,8 @@ ngx_resolver_process_a(ngx_resolver_t *r

default: /* NGX_RESOLVE_A */

+ rn->naddrs = 0;
+
if (rn->naddrs6 == (u_short) -1) {
goto next;
}
@@ -1539,6 +1541,8 @@ ngx_resolver_process_a(ngx_resolver_t *r

case NGX_RESOLVE_AAAA:

+ rn->naddrs6 = 0;
+
if (rn->naddrs == (u_short) -1) {
rn->code = (u_char) code;
goto next;
@@ -1548,6 +1552,8 @@ ngx_resolver_process_a(ngx_resolver_t *r

default: /* NGX_RESOLVE_A */

+ rn->naddrs = 0;
+
if (rn->naddrs6 == (u_short) -1) {
rn->code = (u_char) code;
goto next;
@@ -1817,6 +1823,25 @@ ngx_resolver_process_a(ngx_resolver_t *r
}
}

+ switch (qtype) {
+
+#if (NGX_HAVE_INET6)
+ case NGX_RESOLVE_AAAA:
+
+ if (rn->naddrs6 == (u_short) -1) {
+ rn->naddrs6 = 0;
+ }
+
+ break;
+#endif
+
+ default: /* NGX_RESOLVE_A */
+
+ if (rn->naddrs == (u_short) -1) {
+ rn->naddrs = 0;
+ }
+ }
+
if (rn->naddrs != (u_short) -1
#if (NGX_HAVE_INET6)
&& rn->naddrs6 != (u_short) -1

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

proxied requests hang when DNS response has wrong ident

Pramod Korathota July 15, 2014 06:06AM

Re: proxied requests hang when DNS response has wrong ident

Ruslan Ermilov July 15, 2014 07:42AM

Re: proxied requests hang when DNS response has wrong ident

Pramod Korathota July 15, 2014 10:02PM

Re: proxied requests hang when DNS response has wrong ident

Jason Woods August 18, 2014 06:42AM

Re: proxied requests hang when DNS response has wrong ident

Valentin V. Bartenev August 18, 2014 07:08AM

Re: proxied requests hang when DNS response has wrong ident

Jason Woods August 18, 2014 08:46AM

Re: proxied requests hang when DNS response has wrong ident

B.R. August 18, 2014 09:18AM

Re: proxied requests hang when DNS response has wrong ident

itpp2012 August 18, 2014 09:19AM

Re: proxied requests hang when DNS response has wrong ident

Valentin V. Bartenev August 18, 2014 09:24AM

Re: proxied requests hang when DNS response has wrong ident

Jason Woods August 18, 2014 10:56AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 309
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready