четверг, 16 апреля 2015 г.

Что там у хохлов?

После долго перерыва посмотрел российские каналы. Кое-что серьезно поменялось. Нет, не риторика: по-прежнему "каратели, нацисты, бандеровцы, фосфорные бомбы". Разве что слово "хунта" уже редко употребляют.

Поразило другое: большая часть выступлений украинских политиков теперь идет без перевода. Более того, даже сами ведущие иногда дают цитаты на украинском. Видимо, россиян за год так напичкали украинскими новостями, что перевод уже не сильно и нужен.

Вот ведь парадокс: войну развязали под предлогом того, что жители Донбасса за 23 года не смогли выучить украинский язык. И в результате его теперь выучила вся страна-"защитница"...


P.S. А ещё все уже выучили, что "Бандера" пишется через "а"; и слова "АТО" и "Нацгвардия" теперь часто произносят без приставки "так называемая".

среда, 8 апреля 2015 г.

IP-адрес "застрял" после смены хостинга

Как это решить? Короткий ответ - никак :) Но кое-что сделать можно.

Много раз переносил свой сайт на новый хостинг, и каждый раз была это проблемка... Перенаправляешь домен на новый IP-адрес или nameservers; в течение нескольких часов вроде всё начинает работать нормально. Но всегда находится несколько несчастных пользователей, которые продолжают попадать на старый сайт в течение дней или даже недель. Т.е. их устройства или провайдеры то ли по ошибке, то ли из экономии времени и/или трафика кэшируют DNS непозволительно долго.

Частый совет - сократить TTL, чтобы IP-адреса не кэшировались так долго. Во-первых, это надо делать заранее, после переноса уже поздно. Во-вторых, влияет только на тех клиентов, у кого всё работает правильно. В-третьих, тут палка о двух концах: если у тебя хреновый хостинг, где nameservers часто падают (у меня такое было), уж лучше пусть TTL будет подольше: тогда неполадку мало кто заметит.

Второй частый совет: стереть всё на старом хостинг и разместить сообщение вроде "извините, идет перенос на новый хостинг, попробуйте зайти позже". Я делал мягче: оставлял на старом хостинге сайт, работающий в режиме read-only. Просто при попытке залогиниться пользователь видит сообщение о временных проблемах. Но для просмотра всё работает, SEO не страдает и рекламные объявления продолжают приносить деньги. Конечно, такой вариант не для всех подходит - ведь информация на старом хостинге будет устаревать.

Есть гораздо лучшее, но и более сложное решение: использовать старый хостинг как reverse proxy. Т.е. все запросы, которые по ошибке продолжают на него переходить, мы пересылаем на новый; получаем ответ и шлем назад.

Как конкретно это сделать? Тут разные варианты, зависит от платформы. Я в Windows использую IIS URL Rewrite плюс Application Request Routing (ARR). Допустим, новый хостинг переехал на адрес 50.28.20.147. Тогда web.config на старом хостинге может быть примерно такой:


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="New hosting">
          <match url=".*" />
          <action type="Rewrite" url="http://52.28.20.147/{R:0}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Все остальные файлы на старом хостинге можно стереть - мы же будем пересылать все запросы на новый хостинг.

Заметьте - это именно rewrite, а не redirect. Если у клиента для вашего домена уже закэширован неправильный IP-адрес, то бесполезно делать redirect - клиент опять попадет на тот же IP-адрес, и так до бесконечности.

Проблема с ARR в том, что на дешевом хостинге он может быть не установлен. А без него IIS URL Rewrite не может работать как reverse proxy, т.е. делать rewrite на другой домен. Ну, можно в таком случае самому написать или найти нужный скрипт на PHP или чем угодно - идея-то простая.

Вторая проблема: rewrite всем хорош, но он меняет HOST HTTP Header. Допустим, клиент заходит на ваш сайт mysite.com. HOST в этом запросе будет 'www.example.com'. Но после rewrite на 50.28.20.147 HOST тоже превратится в 50.28.20.147. 

Обычно в этом нет ничего страшного, но может возникнуть проблема с, например, multi-site WordPress. Когда у тебя физически один сайт, но много доменов. Зашел на китайский блог - там одно, на русский - другое, хотя реально сайт тот же самый (для экономии денег).  Потому что WordPress использует HOST, чтобы понять, что именно вернуть клиенту.

Чтобы решить эту проблему, можно делать rewrite на домен, а не IP-адрес:

<action type="Rewrite" url="http://www.example.com/{R:0}" />

Поскольку операция rewrite происходит не у нерадивого клиента, а на сервере, то, вероятно, www.example.com будет корректно переведен уже в новый, правильный IP-адрес.

Есть ещё гораздо более сложное решение: делать rewrite на новый IP, но сохранять старый HOST как custom HTTP header, а потом его восстанавливать. Но об этом - в следующий раз...

NIC.ua

В 2011 году у меня мелькала мысль физически перенести хостинг нашего украинского сайта в Украину, чтоб немного сократить latency. О, слава Богу, что я этого не сделал! Опасения оказались пророческими: СБУ изъяла сервера у одного из крупнейших украинских провайдеров NIC.ua, через которого я регистрировал украинские домены.

Это прямо Простопринт-2 какой-то. Хотя нет, такого идиотизма даже при Януковиче не было. Тогда арестовали сервера ex.ua, который на самом деле были рассадником пиратства. Да и то вернули под давлением общественности. Сейчас же под предлогом борьбы с сепаратизмом потушили тысячи добропорядочных сайтов. В том числе и сайты проукраинских СМИ и волонтеров. Зато большинство сепарских сайтов спокойно переехало на новые хостинги. Ещё пара таких выходок, и можно будет на годы забыть о всяких так электронных правительствах, которыми занимается Яника Мерило и другие "варяги" - доверие будет подорвано слишком сильно.

Наш сайт почти не пострадал, потому что сам хостинг не в Украине,  и, согласно официальной информации, домены не пострадали. Но похоже, что как раз у одного из главных наших рекламодателей DNS сегодня выдает очень старый IP-адрес, и он попадает на "левую" версию сайта. Да, возможно, это просто какие-то локальные проблемы с его компьютером или Интернет-провайдером. Но так, чтобы два таких события случились в один день? Не знаю... Сдается мне, что СБУ таки по ошибке прихватила и несколько nameservers, хотя там никого сепаратизма быть априори не может,,,

Ratings by outbrain