Биты и байты.

Биты и байты.

понедельник, 11 апреля 2016 г.

Профилактические работы. Заглушка для сайта.

Хорошим тоном  при переводе сайта в офлайн, т.е.  когда он просто перестает работать является установка страниц заглушек.
На английском языке они называются 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"

About