Opened 5 weeks ago

Closed 5 weeks ago

#2128 closed enhancement (wontfix)

Using a variable in the resolver directive

Reported by: avsdev-cw@… Owned by:
Priority: minor Milestone:
Component: nginx-module Version: 1.19.x
Keywords: Cc:
uname -a: Linux web-proxy 5.8.0-0.bpo.2-amd64 #1 SMP Debian 5.8.10-1~bpo10+1 (2020-09-26) x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.14.2
built with OpenSSL 1.1.1d 10 Sep 2019
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-Cjs4TR/nginx-1.14.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/ --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-Cjs4TR/nginx-1.14.2/debian/modules/http-auth-pam --add-dynamic-module=/build/nginx-Cjs4TR/nginx-1.14.2/debian/modules/http-dav-ext --add-dynamic-module=/build/nginx-Cjs4TR/nginx-1.14.2/debian/modules/http-echo --add-dynamic-module=/build/nginx-Cjs4TR/nginx-1.14.2/debian/modules/http-upstream-fair --add-dynamic-module=/build/nginx-Cjs4TR/nginx-1.14.2/debian/modules/http-subs-filter


TLDR: My request is that the resolver directive be capable of supporting variables.

Currently I am required to run services on different networks which have different subnets and may have different stand-alone DNS servers (some of which are dynamic DNS servers).

I am using nginx as a reverse proxy on a host which has multiple nics allowing it to connect to hosts of the various networks.

This main host has a common configuration file for proxying (reducing the overhead of managing multiple proxied hosts) and utilises a variable to pass into the proxy_pass directive. Currently the common configuration file has a "resolver" directive indicating the DNS server to use to resolve the proxy_pass host.

This works great when only 1 DNS server on 1 subnet is required, however some of the upstream hosts are on a different subnet with a different DNS configuration and their own DNS server.

Currently the "resolver" directive produces an [emerg] level error when attempting to use a variable as the host:

nginx: [emerg] host not found in resolver "$resolver_ip" in /etc/nginx/proxy_config:20

which leads me to believe that the directive does not support variables. In addition, it appears the resolver directive cannot be overridden and must be used once and only once in server block.

Change History (1)

comment:1 by Maxim Dounin, 5 weeks ago

Resolution: wontfix
Status: newclosed
Type: defectenhancement

The resolver directive indeed does not support variables. Only some directives (and some parameters of them) do support variables. As long as variables are supported in a particular directive parameter, this is explicitly documented.

However, the resolver directive can be used at location level (note "Context: http, server, location" in the documentation). This means that you can use different resolvers by configuring proxying to networks which require using different resolvers in different location blocks.

Note: See TracTickets for help on using tickets.