Does Nginx honor DNS TTLs for proxy upstreams?

Maxim Dounin mdounin at mdounin.ru
Mon Sep 26 09:37:47 UTC 2011


Hello!

On Mon, Sep 26, 2011 at 04:42:07AM -0400, csg wrote:

> I have a short question on Nginx's proxy module. In our setup we reverse
> proxy specific requests to the server of an external partner via
> proxy_pass. Over the weekend the partner updated DNS but Nginx wasn't
> catching up the change and still sent traffic to the old server despite
> the fact the TTL of the record was little enough.
> 
> An additional obstacle might be that in our case we have for example
> 
> proxy_pass http://foo.example.com;
> 
> where foo.example.com is a CNAME to bar.example.com (TTL of 1 hour)
> which is a A record (TTL of 60 seconds).
> 
> Does Nginx honor DNS changes for upstream proxies or are lookups only
> done once on startup? If not, will the TTL being honor even if it has to
> traverse a list of CNAME records until it hits an A record?

No, domain names statically configured in config are only looked 
up once on startup (or configuration reload).

> Both configuration directives, resolver and resolver_timeout are not
> set, therefore the default of 30 seconds should apply (if that is
> relevant here).

These are not relevant for "proxy_pass http://foo.example.com;".  
Resolver is only used for proxy_pass with variables, i.e. 
something like

    resolver 127.0.0.1;
    set $backend "foo.example.com";
    proxy_pass http://$backend;

In such setup ip address of "foo.example.com" will be looked up 
dynamically and result will be cached for 5 minutes.

Maxim Dounin



More information about the nginx mailing list