Иногда сайт нужно вывести из эксплуатации для проведения технических работ. Это может быть процесс резервного копирования, обновление, изменение конфигурации, перенос данных, или восстановление.
Можно просто погасить 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
Выполняем скрип.
Теперь вместо сайта отображается заглушка.
Видно что браузер получает ошибку 503, что нам и нужно было.
Скрипт для отключения режима обслуживания:
rm -f /etc/nginx/sites-enabled/seafile_mnt
ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/seafile
service nginx reload
Ничего сложного.