Skip to content

doh: NGINX module for serving DNS-over-HTTPS (DOH) requests


CentOS/RHEL 6, 7, 8 or Amazon Linux 2

bash yum -y install yum -y install nginx-module-doh

Enable the module by adding the following at the top of /etc/nginx/nginx.conf:

nginx load_module modules/;

This document describes nginx-module-doh v0.1 released on Jan 15 2020.

Simple Nginx module for serving DNS-over-HTTPS (DOH) requests.

CAVEAT EMPTOR: This module is experimental, even though I have been using it successfully with both Firefox and Curl, there may be undiscovered bugs. Zone transfer is currently not officially supported.

Tested with Nginx versions: 1.16.1 (stable) 1.17.6 1.17.7 (mainline).

Instructions for building installing and using Nginx modules can be found at the links below.



I have included a config file for both building as both a dynamic and static module.

This module is only allowed to be used in an http location block.


doh: (takes no arguments) enable DOH at this location block, default upstream DNS server address is, default port is 53, and default timeout is 5 seconds.

doh_address: (takes 1 argument) sets the address of the upstream DNS server, can be either IPv4 or IPv6.

doh_port: (takes 1 argument) sets the port to contact the upstream DNS server on (appies to both TCP and UDP connections).

doh_timeout: (takes 1 argument) sets the timeout in seconds.


simplest use case with upstream DNS server listening on on port 53:

nginx location /dns-query { doh; }

set an upstream address of, a port of 5353, and a timeout of 2 seconds:

nginx location /dns-query { doh; doh_address; doh_port 5353; doh_timeout 2; }


You may find additional configuration tips and documentation for this module in the GitHub repository for nginx-module-doh.

Back to top