http {
resolver 127.0.0.1;
resolver_timeout 1s;
server {
listen 8000;
location /test {
proxy_pass http://$arg_host:8080;
}
}
server {
listen 8080;
…
}
}
ps: other configure is normal
I have recently discoverd that when DNS server down, the first proxy
request return 504 and than the follow proxy request may hang forever.
I use two curl simulate concurrent requests
I found than the first request timeout in 1 second and exit, also it
delete
the timeout timer. because another request waiting dns response, so
nginx
retry send dns query, but dns never response(because it down), it lead
to
the follow request hang and also no timer relate to it;
PS:base on nginx-1.7.4
this module can help you !
HttpUpstreamJdomainModule,
http://wiki.nginx.org/HttpUpstreamJdomainModule.
It buffers the latest IPs of the host,even local dns server down, nginx
will work well.
thanks
but I think nginx should not always pending requests and retry dns
forever。and inconsistent response to the first request and follow
requests
is also a problem. either all as a timeout processing, either all
waiting
dns response
may be nginx need change this behavior
2014-08-20 14:41 GMT+08:00 SmallAnt [email protected]:
hi Ruslan
Please try the attached patch. If you would like an attribution
in a commit log, please tell me your real name.
thanks for the patch
I have a little idea, in ngx_resolver_timeout_handler function find the
next timeout request and add a timer if the time interval between two
requests exceeds the threshold, what do you think about it?
because this patch will appear premature timeout. For example if
resolver_timeout set to 5 seconds, the first request arrived at one
second,
another request arrived at five seconds. Then when the the first request
timeout, the second request immediately returned because of they were
pending for the same dns query.
but the desired result is nginx will try to resend the dns query and if
success the second request process normal otherwise timeout at ten
second.
On Tue, Aug 19, 2014 at 01:43:06PM +0800, ywsample wrote:
listen 8080;
the timeout timer. because another request waiting dns response, so nginx
retry send dns query, but dns never response(because it down), it lead to
the follow request hang and also no timer relate to it;
PS???base on nginx-1.7.4
Please try the attached patch. If you would like an attribution
in a commit log, please tell me your real name.