Хочу рассказать о своем многолетнем опыте размещения сайтов на платформе Windows без IIS, и заодно изложить в тексте все «грабли», по которым пришлось пройтись. Важное замечание — речь будет не о shared-хостинге, а о своем сервере (или это может быть Windows VPS, Windows «в облаке» и прочее).
Почему на Windows и без IIS? В то время, когда у меня возникла сама необходимость именно в Windows платформе, только-только закончила бушевать эпидемия сетевого червя CodeRed который поражал именно IIS и выбор Apache был на тот момент очевиден. Год назад я проводил для себя испытания IIS и понял, что сейчас IIS производительный, по своему удобный и хороший web-сервер, но менять текущую связку на него, лично у меня, уже желания нет. Посему ответ на вопрос — «так исторически сложилось». Apache Веб-сервер Apache — один из старейших и популярнейших серверов и бла-бла-бла-бла. Все это мы и так знаем. Apache — стандарт. Большинство прикладного веб-софта (CMS) «заточено» именно под него. И мне в наследство достался именно небольшой зоопарк из сайтов которые чудесно работают с «апачем», но потребуют «напильника» для использования с другим сервером.
Достаточно долго я использовал 2.0 ветку «апача» и менять ее на, что-то новое желания не было (работает — не трогай), но разработчики PHP в какой-то момент вынудили перейти на новые сборки ветки 2.2 от Apache Lounge так-как стали собирать PHP на VC9 (сборки на офсайте Apache были на Visual C 6.0)
Переход и проверка с «подпиливанием» заняли времени 2-3 часа, но оно того стоило. Ветка 2.2 в отличии от 2.0 на Windows работает гораздо шустрее и увереннее. Прирост производительности даже «на глаз» был очевиден. Ребята из Apache Lounge собирают массу полезных модулей для апача: mod_fcgid, mod_proxy, mod_security и много других.
PHP Начиная кажется с версии 5.3 разработчики перешли на компиляцию в VC9 и раз мы заботимся о своем сервере и обновляем PHP до актуальных версий мы будем использовать последние стабильные версии. Для собранных Windows-модулей существует такая «секретная» и очень полезная ссылка downloads.php.net/pierre/
PHP-акселератор Акселератором для PHP у меня долго работал eAccelerator. У него самого есть одна неприятная особенность — я раз в сутки рестартую PHP и очищаю временную папку eAccelerator'a для предотвращения его падений. Не сказать, что он плохой, но развитие свое прекратил достаточно давно, и совсем недавно официальная страница совсем закрылась. С очисткой временной папки он прекрасно работает и проработал у меня с 2002 до 2011 года.
На данный момент, я вполне успешно, хоть и не долго, использую wincache от Microsoft (версия 1.2.614-dev-5.2) wincache работает только с Non Thread Safe (nts) сборкой PHP и работает вполне успешно на Apache, даже с учетом того, что в официальных документах я не нашел информации о работе с Apache (только под IIS).
Сравнительным плюсом сразу видно работу именно файлового кеша, в CMS где страницы собираются методом include десятков и сотен файлов видно прирост производительности на wincache по сравнению с eAccelerator. Итого: Apache 2.2 (VC9) + mod_fcgid + PHP (VC9 NTS) + wincache
MySQL Тут все стандартно и большой разницы с настройками на *nix системах нет. В ветке 5.5 разработчики обещают прирост производительности Windows-версии MySQL, но пока на практике не проверял.
Полезный совет: проверяйте содержимое файла hosts на свежих серверах Windows 2008, в некоторых случаях первым в файле может стоять «резолв» localhost в IPv6 адрес, что приводит MySQL к некоторым проблемам. В идеале в hosts должен быть резолв имени localhost в 127.0.0.1 В некоторых случаях если этот резолв закоменнтирован, вы можете получить очень большие задержки в генерации страниц просто из-за того, что весь PHP-софт обращающийся к MySQL по имени localhost будет каждый раз делать это через DNS. Всегда проверяйте содержимое файла hosts на свежих серверах!
memcached Все просто. Ставится, работает, за полгода никаких проблем не отмечено.
nginx Это моя любимая часть. nginx — одна из самых приятных, простых, быстрых и логичных программ которые я использовал. Для Windows-версии существуют ограничения (1 воркер, 1024 соединения и не работают модули использующие распределенную память: кеш, геолокация и т.п.), но даже не смотря на все это, использование nginx как фронт-энда Apache и «отдачи» статических файлов более чем оправданно. Скачивать готовые сборки можно с сайта автора, для любителей самостоятельной сборки есть инструкция.
К чему все это? Нормальный хостинг на Windows с использованием Apache+PHP+MySQL возможен. Это не извращение, а вполне себе рабочий вариант. Естественно, эта-же связка на *nix может работать и работает быстрее, но если вам нужны специфичные windows-возможности, как в моем случае, то Windows это не обязательно IIS+ASP.NET
Быстрые сайты с генерацией страниц в 0,02 — 0,04 секунды возможны и на Windows-платформе :-) Bitrix, Drupal, Wordpress, DLE, ZenPhoto, BigStreet, LiveStreet, различные CMS-трекеры и многое другое работает. Windows EXE-программы как CGI, почтовые сервера, FIDO-софт, программы-боты существующие только под Windows-платформу — все это работает в удобной для меня среде.
Apache и Nginx на Windows - это не изврат. Изврат это - IIS + PHP, причем когда это делается заведомо специально, а не потому что есть необходимость в Win-платформе, типа: "мне проще в винде, а IIS специально для винды, и PHP потому что я ничего больше не знаю".
На заре увлечения вебом я как то пробовал IIS и Microsoft Web Platform Installer. Прикольно конечно, установить прямо из интернета друпал или вордпрес всего за пару кликов, но позже я понял что эта штука сделана лишь для того что бы юзеры обратили внимание на IIS а потом возможно, переползли и на ASP.NET. Точно так же и с портами типа апача. Да, оно вроде как работает неплохо, но все равно потенциала своего не раскрывает полностью, и зажимает в рамки. Как IIS так и Apache/Nginx разрабатывались под свою ОС и под особенности ее архитектуры.
На заре увлечения вебом я как то пробовал IIS и Microsoft Web Platform Installer. Прикольно конечно, установить прямо из интернета друпал или вордпрес всего за пару кликов, но позже я понял что эта штука сделана лишь для того что бы юзеры обратили внимание на IIS а потом возможно, переползли и на ASP.NET. Точно так же и с портами типа апача. Да, оно вроде как работает неплохо, но все равно потенциала своего не раскрывает полностью, и зажимает в рамки. Как IIS так и Apache/Nginx разрабатывались под свою ОС и под особенности ее архитектуры.