[Nginx] メンテナンス状態に設定する

点検作業などでNginxサイトをメンテナンス状態に設定する。
httpはhttpsにリダイレクトする設定を行っているとする。

/etc/nginx/conf.d/www.confを以下のように編集。

geo $access_from {
    default external; # 外部のIPからはメンテナンスに設定
    111.222.333.444 internal; # 特定のIPはメンテナンスにならないように指定することが可能
}

server {
    listen       80;
    server_name  hogehoge.com;
    return 301 https://$host$request_uri;
}

server {
    listen       443 default ssl;
    ssl on;
    server_name  hogehoge.com;
    root         /var/www/html;

    error_page 503 @maintenance;

    set $maintenance false;

    if (-e /var/www/html/maintenance.html) {
        set $maintenance true;
    }
    if ($access_from !~ external) {
        set $maintenance false;
    }
    if ($maintenance = true) {
        return 503;
    }

    location @maintenance {
        root /var/www/html;
        expires 0; # キャッシュさせない
        rewrite ^(.*)$ /maintenance.html break;
    }
        ...
}

この後、/var/www/html配下にメンテナンスページ用のmaintenance.htmlを作成し、配置する。