Disable caching the names in /etc/hosts in reverse proxy?

Jason Woods devel at jasonwoods.me.uk
Mon Apr 20 17:52:13 UTC 2015


> On 19 Apr 2015, at 01:05, xuhdev <nginx-forum at nginx.us> wrote:
> 
> I'm using Nginx to act as a reverse proxy, where the backend is a name
> defined in /etc/hosts. However, Nginx does not react to the changes made in
> /etc/hosts until restarted. Is it possible to disable caching the names in
> /etc/hosts in reverse proxy?

As B.R. mentioned, the DNS lookup (via /etc/hosts or real DNS) is only done at startup and reload.

You can change the behaviour to dynamic lookup by specifying a resolver in the server block and then using variables in the proxy_pass. For example:

server {
  resolver 8.8.8.8;
  location / {
    proxy_pass http://reverse_host$uri$is_args$args;
  }
}

Because of the variables Nginx can't predict at startup what to perform a lookup for. As a result it will perform the DNS lookup at request time. The lookup response is then cached for the DNS TTL period.

CPU may be a little higher I guess but I haven't noticed anything even on high load clusters.

This behaviour is eluded to in the documentation's last couple of paragraphs for proxy_pass at:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

Jason


More information about the nginx mailing list