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

Заглушка для технических работ на 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

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

Теги

 

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

Резервное копирование Atlassian JIRA через GUI

Резервную копию Atlassian JIRA можно сделать в Администрирование > Система > Импорт и Экспорт > Резервное копирование. Здесь вы сможете сделать резервное копирование содержимого базы данных в доступном формате XML.

Теги

Let's Encrypt — настройка certbot в Ubuntu 22

Установим и настроим certbot для получения и обновления SSL сертификатов Let's Encrypt. Операционная система Ubuntu 22.04.4, веб-сервер Nginx. Настраивать будем на примере развёрнутого SeaFile.

Теги