DEV Community

loading...

Dynamic and Abstract Nginx

aakhtar3 profile image aakhtar3 ・1 min read

Dynamic and Abstract Nginx

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

Check out this repo which has more include examples.

GitHub logo 10up / nginx_configs

Nginx Configuration Template for WordPress Sites

Discussion

pic
Editor guide