Партнерки вебмастерам

Баннер

Кто онлайн

Сейчас 61 гостей онлайн

Статистика

Архив содержит 29 файлов в 11 категориях. На данный момент файлы скачаны 103394 раз.
Опыт миграции с LNMP на WIMP PDF Печать E-mail

Прошлой весной у меня появилась необходимость смены хостинга по причине возросших требований к каналу и оборудованию. К тому времени большая часть проектов была написана на PHP, а часть на ASP.NET. Работала.NET часть на mono и в целом с задачей справлялась, однако при переезде появилось желание поэксперементировать и взять Windows-хостинг, дабы .NET приложения работали в родной среде, а PHP... ну он и в африкена винде PHP. Однако, всё оказалось не так просто.

IIS 7

Поднять IISPHP и MySQL труда не составило, благо всё делается в несколько нажатий мышкой. eAcceleratorбыл заменён на WinCache.

Приложения, которые были написаны лично - запустились прекрасно, потребовав минимального вмешательства. Основной задачей было переписать rewite-правила Nginx для использования с URL Rewrite, что и было сделано для собственных приложений.

URL Rewrite

Для сторонних же приложений, а это были IPB и Wordpress, я решил воспользоваться функцией URL Rewrite по импорту правил от Apache. Взял родные .htaccess, скормил их парсеру и получил работающие Web.config. Пришло время тестировать работу. Тут и вылезла проблема с Wordpress.

Wordpress

В одном из блогов, работающих на нём использовались русские урлы для постов. Для работы ЧПУ ипользовалось вот такое правило:

<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>

Проблема заключалась в том, что в базе данных урлы постов хранились в UTF-8, а вот URL Rewrite по какой-то причине передавал в Wordpress значения в Win1251. Естественно, ни одна ссылка не работала. Можно было, конечно, переконвертировать БД или сменить урлы на английские или разобрать с таким поведением URL Rewrite, но на тот момент было выбрано самое быстрое решение - использовать iconv для конвертирования значений $_GET из win1251 в UTF-8. Ссылки заработали, пользователи довольны.

Invision Power Board

Вторая крупная проблема оказалась схожей, разница кодировок. Однако, причина её была другой. Мой любимыйInvision Power Board использует для отображения даты функцию strftime. И на Linux всё было хорошо. Однако, как оказалось, есть проблема с этой функцией на Windows. При локали, установленной в UTF-8, эта функция возвращает дату на английском. setlocale(LC_ALL, 'ru_RU.utf8'); не срабатывает. Разработчики IPBпишут, что это баг в PHP/Windows и ничего с этим поделать они не могут. В тоже время, установка локали вWindows-1251 работает как положено, возвращая русские значения, но, как вы уже поняли, в неправильной для остального приложения кодировке. Поэтому пришлось использовать следующее решение - выставить локаль вWindows-1251 и во всех местах, где вызывается strftime (благо их не очень много) добавить конвертацию полученного значения из windows-1251 в utf-8 с помощью iconv.

Вот с такими неприятностями я столкнулся при миграции с LNMP на WIMP. Но в целом, впечатления от работыWindows-хостинга остались положительными. Это IIS, с его великолепной панелью управления, которая умеет подключаться к серверу с удалённого компьютера. Это WinCache, который без каких либо проблем заменилeAccelerator, а так же его информативная страница статистики. Это URL Rewrite, который легко заменяетmod_rewrite. Отличная, хотя и с некоторыми проблемами, производительность PHP. Ну и конечно, идеальная работа .NET приложений.

Windows Server 2008 R2

К некоторому моему сожалению, спустя буквально пару месяцев, возникли проблемы с хостером, вроятно вы о них слышали, пришлось срочно переносить всё на другой сервер и, так как не было возможности выбора, мы снова оказались на Debian. Хотя я был бы не против продолжить использовать Win2k8R2 и IIS для хостинга своих проектов. Возможно в слудующих проектаъ я снова вернусь к этой платформе.