Перейти к основному содержанию

Заглушка для технических работ на Nginx

Nginx

Иногда сайт нужно вывести из эксплуатации для проведения технических работ. Это может быть процесс резервного копирования, обновление, изменение конфигурации, перенос данных, или восстановление.

Можно просто погасить Nginx, но там могут крутиться и другие сайты. Можно отключить конфигурацию сайта, но тогда пользователи получат некрасивую страничку и долгое ожидание загрузки. А поисковые боты могут неверно проиндексировать сайт. Нужно отдать какую-то HTML страничку и 503 ошибку.

Ошибка 503 "Service Temporarily Unavailable" — это стандартный код состояния HTTP, который сообщает клиенту о том, что запрашиваемый сервис или ресурс временно недоступен.

В этом случае посетители поймут, что сайт находится на обслуживании, а поисковые боты просто придут позже и индексация ваших страниц не пострадает.

Сначала создадим страничку HTML maintenance.html.

mrdir /var/www/html/mnt
touch /var/www/html/mnt/maintenance.html
chown -R www-data\: /var/www/html/mnt

 Содержимое на ваш вкус:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Maintenance</title>
        <style>
            body{color:#666;background-color:#f1f1f1;font-family:sans-serif;margin:12%;max-width:50%;}
            h1,h2{color:#333;font-size:4rem;font-weight:400;text-transform:uppercase;}
            h2{color:#333;font-size:2rem;}
            p{font-size:1.5rem;}
        </style>
    </head>
    <body>
        <h1>503</h1>
        <h2>ТЕХНИЧЕСКИЕ РАБОТЫ</h2>
        <p>Сайт в режиме обслуживания. Зайдите позже.</p>
        <h2>Temporarily Offline</h2>
        <p>This site is closed for maintenance. Сheck back again soon.</p>
        <h2>⚒️</h2>
        <p>⛏️</p>
    </body>
</html>

Копируем файл конфигурации сайта:

cp /etc/nginx/sites-available/seafile /etc/nginx/sites-available/seafile_mnt

Стираем там всё лишнее и настраиваем выдачу нашей странички-заглушки:

server {
        server_name files.internet-lab.ru;

        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/files.internet-lab.ru/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/files.internet-lab.ru/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        server_tokens off;
        proxy_set_header X-Forwarded-For $remote_addr;

        root /var/www/html/mnt;
        error_page 503 /maintenance.html;

        location /maintenance.html {
        }

        location / {
            return 503;
        }
}

server {
    if ($host = files.internet-lab.ru) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name _;
    return 404;
}

Я оставил весь код от certbot, чтобы SSL работало.

Подготовим скрипт для включения режима обслуживания:

rm -f /etc/nginx/sites-enabled/seafile
ln -s /etc/nginx/sites-available/seafile_mnt /etc/nginx/sites-enabled/seafile_mnt
service nginx reload

Выполняем скрип.

web

Теперь вместо сайта отображается заглушка.

web

Видно что браузер получает ошибку 503, что нам и нужно было.

Скрипт для отключения режима обслуживания:

rm -f /etc/nginx/sites-enabled/seafile_mnt
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/seafile
service nginx reload

Ничего сложного.

Теги

 

Похожие материалы

Обновляем Nginx на Ubuntu Server 20.04 из репозитория

Пришла задачка — обновить nginx на одном из web серверов. Главное требование, обновиться нужно на версию не ниже 1.21, потому что в более ранних версиях обнаружена какая-то уязвимость.

Теги