вторник, 30 апреля 2013 г.

Включение maintenance режима в Nginx без помощи системного администратора

Вчера реализовал новую, более удобную для разработчиков, возможность перевести сайт в maintenance режим для всех посетителей, кроме тех, кто заходит с определенных ip (сайт всегда доступен самим разработчикам).

Имеем два ip адреса, с которых нужно пускать клиентов независимо от текущего режима сайта (для примера 67.81.43.124 и 67.23.44.5). Чтобы для включения maintenance режима не нужно было дергать администратора, будем считать наличие файла maintenance.flag в корне сайта, признаком включения maintenance режима.

Я использую nginx из Debian Squeeze и примеры будут ориентированы на него.

Для поддержки нового режима я добавил несколько секций в /etc/nginx/sites-enabled/www.example.com

geo $show_maintenance_page {
    default yes;
    67.81.43.124 no;
    67.23.44.5 no;
}

server {
    listen 80;
    server_name www.example.com example.com;

    if ( -f /var/www/www.example.com/maintenance.flag ) {
        set $maintenance y;
    }

    if ( $show_maintenance_page = yes ) {
        set $maintenance y$maintenance;
    }

    if ( $maintenance = yy ) {
        return 503;
    }

    error_page 503 @maintenance;

    location @maintenance {
        root /var/www/maintenance;
        rewrite ^(.*)$ /maintenance.html break;
    }

    # All other config

}

Содержимое /var/www/maintenance у меня существует еще с прежнего варианта, который я описывал ранее. Теперь чтобы перевести сайт в режим maintenance нужно создать файл maintenance.flag в корне сайта (/var/www/www.example.com). После этого всем посетителям будет выдавать maintenance страницу, а для тех, кто заходит с адресов 67.81.43.124 или 67.23.44.5 будет доступен сайт. Чтобы выключить maintenance достаточно удалить файл maintenance.flag.

Комментариев нет:

Отправить комментарий