Code Monkey home page Code Monkey logo

nginx-maintenance-mode's Introduction

Nginx Maintenance Mode

           _   __      _
          / | / /___ _(_)___  _  __
         /  |/ / __ `/ / __ \| |/_/
        / /|  / /_/ / / / / />  <
       /_/ |_/\__, /_/_/ /_/_/|_|
    	      /____/
    __  ___      _       __
   /  |/  /___ _(_)___  / /____  ____  ____ _____  ________
  / /|_/ / __ `/ / __ \/ __/ _ \/ __ \/ __ `/ __ \/ ___/ _ \
 / /  / / /_/ / / / / / /_/  __/ / / / /_/ / / / / /__/  __/
/_/  /_/\__,_/_/_/ /_/\__/\___/_/ /_/\__,_/_/ /_/\___/\___/

GitHub release licence Bash

Easily toggle on or off maintenance mode with nginx

Screenshots

screenshot

Installation

Download and execute the script:

$ git clone https://github.com/tmiland/Nginx-Maintenance-Mode.git
$ cd Nginx-Maintenance-Mode
$ cp -rp ./maintenance-page.conf /etc/nginx/snippets/
$ git clone https://github.com/tmiland/server-error-pages.git /etc/nginx/html/server-error-pages
$ cp -rp /etc/nginx/html/server-error-pages/_site/maintenance-page.html /etc/nginx/html/server-error-pages/_site/maintenance-page_off.html
$ chmod +x maintenance.sh

Add to server directive

server {

## Nginx Maintenance Mode
include snippets/maintenance-page.conf;

}

Optionally

$ ln -s /path/to/Nginx-Maintenance-Mode/maintenance.sh /usr/bin/maintenance

Check for errors

$ nginx -t 
  • Add to each virtual server in /etc/nginx/sites-available you want to enable maintenance mode on.
  • Else, add to nginx.conf.

Usage

$ ./maintenance.sh [hostname] [on/off]

Optionally

$ maintenance [hostname] [on/off]

*** Note: [hostname] must match the hostname in your.hostname.com.conf/nginx.conf ***

server {
	server_name your.hostname.com;
  }
  • When maintenance mode is toggled on, maintenance-page_off.html will be copied to $server_name-maintenance-page_on.html. E.g: your.hostname.com-maintenance-page_on.html
  • This way you can use this with multiple virtual servers, and easily toggle on/off maintenance mode individiually for each site.
  • Toggle off, deletes $server_name-maintenance-page_on.html

Advanced usage

$ ./maintenance.sh my.hostname.com on
$ ./maintenance.sh my-other.hostname.com on
$ ./maintenance.sh hostname.com on
$ ./maintenance.sh my.hostname.com off
$ ./maintenance.sh my-other.hostname.com off
$ ./maintenance.sh hostname.com off

Logic in maintenance-page.conf


if (-f /etc/nginx/html/server-error-pages/_site/$server_name-maintenance-page_on.html)
{
  return 503;
}
error_page 503 @maintenance;
location @maintenance
{
  rewrite ^(.*)$ /$server_name-maintenance-page_on.html break;
  root /etc/nginx/html/server-error-pages/_site;
}

  • If your.hostname.com-maintenance-page_on.html exists, error 503 is returned.
  • If not, operation is back to normal.

Added Bonus

Add support for custom error pages

*** This will add the error pages included in the repo ***

$ cp -rp ./error_pages.conf /etc/nginx/snippets/
$ cp -rp ./error_pages_content.conf /etc/nginx/snippets/

Add to server directive

*** Final configuration should look like this: ***

server {

## Nginx Maintenance Mode
include snippets/maintenance-page.conf;
## Custom Error Pages
include snippets/error_pages.conf;

}

Scheduled maintenance

Example shell script:

Name the script, someting like: pg_backup_cron.sh

#!/usr/bin/env bash

# Turn on maintenance mode
/path/to/Nginx-Maintenance-Mode/maintenance.sh hostname.com on
# Run database backups
/path/to/pgbackup/pg_backup.sh
# Turn off maintenance mode
/path/to/Nginx-Maintenance-Mode/maintenance.sh hostname.com off
exit 0

Add job to cron:

$ crontab -e
@daily bash /path/to/pgbackup/pg_backup_cron.sh > /dev/null 2>&1 #Automated PostgreSQL Backup on Linux

Used in this example: pgbackup - Automated PostgreSQL Backup on Linux

Why maintenance mode is important

  • Helps your SEO rankings

As recommended by Google, Maintenace Mode is using the 503 service unavailable result code, which tells search engine crawlers that the downtime is temporary.

Credits

Donations

  • PayPal me
  • [BTC] : 33mjmoPxqfXnWNsvy8gvMZrrcG3gEa3YDM

Web Hosting

Sign up for web hosting using this link, and receive $100 in credit over 60 days.

DigitalOcean

Disclaimer

*** Use at own risk ***

License

MIT License Image

MIT License

nginx-maintenance-mode's People

Contributors

tmiland avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.