Хорошим тоном при переводе сайта в офлайн, т.е. когда он просто перестает работать является установка страниц заглушек.
На английском языке они называются Coming Soon page , under Construction Page, но суть их везде одинаковая:
дать пользователю информацию, что это не у него там что-то сломалось, а система действительно не работает и будет запущена к такому то времени.
Есть несколько вариантов использования таких заглушек.
Вариант 1. С возможностью тестирования.
По текущим портам приложения 80 и 443, ставим заглушки, приложение привязываем к новому порту например 555 для http и 556 https.
Пока пользователи по обычному адресу получают страницу заглушку, мы можем спокойно обновлять приложение и заниматься его тестированием, по адресу http://сервер:555
Для SharePoint также необходимо настроить сопоставления альтернативного доступа в шарике через админку , чтобы приложение открывалось по новому порту.
Заглушка состоит из нескольких файлов
web.config , настраиваем редирект когда файл не найден . ошибка 404
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="false" destination="" exactDestination="true" childOnly="false" httpResponseStatus="Permanent" />
<defaultDocument>
<files>
<clear />
<add value="index.html" />
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="iisstart.htm" />
<add value="default.aspx" />
</files>
</defaultDocument>
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="index.html" responseMode="File" />
</httpErrors>
</system.webServer>
<system.web>
<authentication mode="Windows" />
<customErrors defaultRedirect="http://сервер/index.html" mode="On">
<error redirect="http://сервер/index.html" statusCode="404" />
</customErrors>
</system.web>
</configuration>
Сама страница заглушки
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Профилактические работы</title>
<!-- Our CSS stylesheet file -->
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:300" />
<link rel="stylesheet" href="underconstructionfilesctc/css/styles.css" />
<link rel="stylesheet" href="underconstructionfilesctc/countdown/jquery.countdown.css" />
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<img src="underconstructionfilesctc/img/maint.jpg" alt="" style="display:block;margin:auto;"/>
</br>
<div id="countdown"></div>
<p id="note"></p>
<footer>
<h2><i>Статус:</i> Профилактические работы</h2>
<a class="tzine" href="mailto:admin@mail.ru">По срочным вопросам <i> обращаться <b> к администраторам</b></i> </a>
</footer>
<!-- JavaScript includes -->
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script src="underconstructionfilesctc/countdown/jquery.countdown.js"></script>
<script src="underconstructionfilesctc/js/script.js"></script>
</body>
</html>
Результат выглядит таким образом
Вариант 2. Без возможности тестирования.
В ASP.NET есть такая замечательная возможность как использование оффлайн страницы, создаем простую HTML страницу и называем ее App_Offline.htm копируем ее в корень приложения Sharepoint. Подробно описано тут
И сайт SharePoint начинает отображать эту страницу, единственное ограничение на странице может быть только текст никакой интерактивности и картинок
Самый простой пример кода страницы
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>Down for maintenance</title>
<style type="text/css">
body { background:#e8e8e8; font-family:arial;}
h1, p { text-align:center; }
p { font-size: 20px; }
img { margin:auto; display:block;}
.content { background:#ffffff; border:1px solid #ccc; border-radius:4px; box-shadow:0 1px 0 rgba(0,0,0,0.2);margin:60px auto 0; padding:20px;width:640px; }
</style>
</head>
<body>
<div class="content">
<h1 >Внимание на сайте ведутся профилактические работы.</h1>
<p style="color:red;">Окончание работ 10.04.2016 10:30:00</p>
</div>
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
<!-- This comment is just to take the page size above 512 bytes, as IIS doesn't pick the file up properly otherwise. -->
</body>
</html>
Выглядит заглушка примерно так. Никакой интерактивности, картинок только текст, зато работает моментально и просто в эксплуатации.
Вариант 3. С участием админов.
На любом компьютере домена, с установленным IIS делается страница заглушка на 80 и 443 порту http://сервер-заглушка/
Параллельно с этим: на dns сервере меняется cname нашего сервера , чтобы он указывал на наш сервер заглушку.
А наш сервер привязываем через dns к имени сервера заглушки и тестируем наше приложение теперь по адресу http://сервер-заглушка/
А пользователи по адресу http://сервер видят нашу заглушку. Чтобы изменения быстрее вступили в силу на машине вводим ipconfig /flushdns
Однако этот вариант не совсем удобен, если для тестирования используются смежные системы которые обращаются по действующему адресу сервера.
В этом случае лучше иметь второй сервер приложений, который неизвестен пользователям и тестировать оттуда.
Пример Web.config с перенаправлением с https на http, для этого должен быть установлен модуль URL Rewrite в IIS
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=10" />
</customHeaders>
</httpProtocol>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:10:00" />
</staticContent>
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear />
<error statusCode="404" path="http://mb-07-53" responseMode="Redirect" />
</httpErrors>
<defaultDocument>
<files>
<clear />
<add value="default.html" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="HTTP Redirect to HTTPS" enabled="true"stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTPS}" pattern="on" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:1}"appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Вариант 4. С ограничением по IP и перенаправлением по ошибке 403 Access Denied.
Добавляем Ip адреса с которых возможно тестирование, выбираем опцию добавить разрешающий элемент.
Выбираем опцию , изменить параметры и ставим запретить для всех кто не в списке.
Настраиваем, перенаправление для 403 ошибки.
PS Как сделать ресайкл пула по расписанию, создаем задачу в планировщике Windows с таким bat файлом
%systemroot%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:"PoolName"
PS Как сделать ресайкл пула по расписанию, создаем задачу в планировщике Windows с таким bat файлом
%systemroot%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:"PoolName"