Nginx – A common maintenance page for multiple dockerized Angular applications

dockermaintenancenginxvirtualhost

I am hosting multiple Angular apps with Nginx. All of them run in their own containers and if a container is offline, I display a maintenance page located at /var/www/maintenance/. To do this, my virtual host configuration files are generally like this (Irrelevant parts omitted):

server {

        ...  

        location / {
        proxy_pass http://127.0.0.1:8099;
        proxy_set_header X-FORWARDED-FOR $proxy_add_x_forwarded_for;
        proxy_set_header X-FORWARDED-HOST $host;
        proxy_set_header X-FORWARDED-PROTO $scheme;
        proxy_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
        try_files $uri $uri/ /index.html;
        }

        error_page 403 501 502 503 504 /maintenance.html;
        location = /maintenance.html {
            root /var/www/maintenance;
        }
}

This works fine, but is cumbersome in case I have to make changes. How could I implement this functionality in the main nginx.conf or make it otherwise more maintainable? Could I, instead of including the maintenance page configuration in every virtual host configuration, include it once in the nginx.conf which in turn includes all the virtual host configurations?

Best Answer

Add a new configuration file maintenance.conf, which contains:

location = /maintenance.html {
    root /var/www/maintenance;
}

And then use

include /path/to/maintenance.conf;

in your virtual host configuration.