Skip to main content

Dynamic and Abstract Nginx

· One min read
Ayyaz Akhtar
Engineer @ Disney

Nginx is a powerful webserver and can built dynamically by injecting environment variables with envsubst and importing modular configs with the include directive.

envsubst

input/output
  • Create /etc/nginx/nginx.conf.template with environment variables ${VAR}
  • Use envsubst to dynamically generate a new /etc/nginx/nginx.conf
# Define the environment variables
export SERVER='example' LOG='example'

# Run command to generate new nginx.conf
cd /etc/nginx
envsubst '${SERVER},${LOG}' < nginx.conf.template > nginx.conf
brew install

Mac users will need to install gettext which includes envsubst.

brew install gettext
brew link --force gettext

Include

From the example above using the sample http config.

* is a wildcard and will match on example.com.conf.

http {
...
include /etc/nginx/conf.d/example.*.conf;
...
}

Here is an example folder structure for your Nginx modules.

/etc/nginx/
nginx.conf # HTTP
/conf.d # Server(s)
example.com.conf # Can contain multiple servers
default.conf # Comes with nginx
*.conf
/sites-enabled # Includes
/location # Location Includes
assets.inc # /location blocks to static assets
*.inc
/SSL # SSL Includes
example.com.inc # Contains SSL directives for example.com
*.inc
/* # You can continue to modularize your code base
*.inc