Load-Balancing, PHP, FreeBSD и Suhosin

Последние 2 недели ужасно много времени (как свободного, так и часть рабочего) я посветил вопросам load-balancing. Пришлось “бегло” пройтись по nginx, поставить Cygwin и поиграться с LightTPD (причём он отработал как load-balancer примерно около 2 часов для теста), перечитать мануалы у Apache HTTP Server (mod_rewrite и mod_proxy). Чесно говоря, всё работает в тепличных условиях очень даже отлично и без особых временных затрат.

Потом уже начал собирать FreeBSD 6.2 RC2 с Apache 2 и PHP 5.2.0. Так вот, у FreeBSD с PHP 5.2.0 сразу идёт возможность установить Suhosin (опционально, по умолчанию – включено). Пока всё собирается нормально, но вот Suhosin я временно выкинул – это сервер не для shared hosting, а эксперимент в тепличных условиях, и Suhosin там не нужен.

А что такое Suhosin? Suhosin is an advanced protection system for PHP installations. Что означает – современная система защиты для PHP. Предназначена защищать нас от самих-же себя и дыр в PHP в общем. Зачал её уже известный Stefan Esser. Кстати, эта-же комманда сообщила о нескольких дырочках и в WordPress, поэтому рекомендуется обновиться до версии 2.0.6.

Установка WordPress 2.0.4 на хостинг NetFirms.

На днях пришлось ставить WordPress 2.0.4 на хостинг NetFirms. Стокнулся я там с такой маленькой проблемой: если permalink установить в режим /%postname%/ WordPress их совсем не видит. Вообще, любой режим, кроме по умолчанию, не работает. Как оказалось, PHP 4-ой версии там установлен как CGI и, при включенной поддержке .htaccess (их поддержка для хоста по умолчанию выклячена и её нужно включать через Control Panel) и mod_rewrite, в переменных окружения нет ни малейшего упоминания о том, что находиться в адресной строке. Не приятно очень, подумал я, а «клиента» не устраивала классическая (по умолчанию) структура permalink, а вид /index.php/%postname%/ тоже никто не хотел. Дальнейшие эксперименты показали, что на сервере прекрастно поддерживалась работа в «режиме» MultiViews и WordPress в таком режиме прекрастно работает.

Чтож, подумал я, раз есть mod_rewrite и поддержка MultiViews да и WordPress всё это поддерживает, почему бы не переписать стандартный RewriteRule . /index.php [L] на свой, так, что-бы использовался MultiViews. В итоге мы получили RewriteRule ^(.*)$ /index.php/$1 [L,QSA]. Запретив права записи в этот файл, мы получили желанный результат. Даже не смотря на то, что в настройках permalink было /%postname%/, а WordPress получал /index.php/%postname%/. Так как, всё чудестным способом заработало – все были довольны!

Что будет, скажите вы, если «клиент» захочет поменять структуру permalink? Возможно всё развалиться, но «клиент» предупреждён, да и структуру permalink он менять наврятли будет – я не превый раз ставлю для него WordPress, и это его самая самая излюблення конфигурация. Хотя, он без меня, на такие резкие шаги не пойдёт, дизайн сменит обязательно, а вот в структуре системы кардинально менять не будет ничего.

Что я могу сказать о хостинге NetFirms? А практически ничего. Я вошёл, разобрался во всём (долго привыкал к их Control Panel), установил то, что просили, всё заработало и почти никакой головной боли. По крайней мере пока головной боли нет.

Делал свой маленький набор Web-разработчика

С самого утра собираю маленький (334 MB) наборчик для себя, что-то вроде Денвера. Вот только под себя и для тех кто рядом… Входит в него: Apache 2, MySQL 3.23, MySQL 4.0, MySQL 4.1, MySQL 5.0, PHP 4.4.2 и phpMyAdmin. Всё устанавливается как сервисы по запуску одного .bat файла, удаляется так-же (сервисы с префиксами, и по-этому если что-то из этого списка стоит, его достаточно будет остановить). Надо только что-бы был свободен 80 порт для Apache и 3305-3308 для MySQL. Никаких файлов копировать в системные каталоги не надо. Причём тут-же ещё и дебугер установлен (для особо продвинутых). Если архивом, то весит 112 MB.

По хорошему там не хватает ещё SMTP/POP3 какого сервера, для отладки рассылок, отсылок, засылок всяких (я думаю это был-бы Mercury Mail Transport System)… И мануала, как что делать… Мне следовало такую вещь собрать уже давно, что-бы небыло таких проблем и глупых ситуаций

В принципе, ничего сложного – всё складываем рядом в один каталог, так что бы легко можно было кидать на флешку или болванку, DLL от PHP (и сам php4ts.dll и из каталога dll) кидаем к Apache в каталог bin, жёстко прописываем пути. Всё это легко ставиться из командной строки (как не странно для MS Windows 2000/XP) и без всяких srvany.exe. Просто данный софт (Apache, MySQL) отлично сам преспособлен к такой работе.

HTTP, Apache и Checksum Offload, Segmentation Offload на новой сетевой карте

Очень часто бывает ситуация, когда маленький сервер, используемый для разработок, находиться за рутером, с форвардингом 80 порта (и ещё каких либо портов) на этот сервер. Вот и у нас так. А вчера у нас на таком сервере вышла из строя материнская плата. В течении часа, ей привезли замену, на неё была установлена новая операционная система, вернули все нужные для разработки сервисы. И вот ведь дилемма появилось, которой небыло… Все, кто находился вне офисной сети, за рутером, не получали полностью все пакеты по HTTP протоколу (я в том числе, так как я ходил через внешний адрес). Так как по части этого сервера я главный, решать эту проблему пришлось мне.

  1. Грешит какой-нибудь из MySQL серверов с соединениями – проверка показала что все они работают отлично
  2. Грешит PHP – переустановил более новую версию PHP (мало ли, какой dll повредили, пока всё восстанавливали), не помогло проблеме
  3. Сменил весь Apache до последней версии – тоже не помогло

Тупик… Полный… Столько бились и никакого толку. Firewall я отрубил сразу – в локальной сети чужих нету, вирусов пока тоже, везде антивирусы снуют. Антивирус убрал, а вдруг он грешник? Нет… не помогло. Как в анекдоте, перегрузил 3 раза, обошёл 3 раза вокруг стола, перевоткнул кабеля в switch, перегрузил router и gateway. Не помогло…

Виноватых осталось не много… Тёмные силы, полнолуние и операционная система. С первыми двумя мне не справиться – я в классе 5 через недели 2 забросил факультатив по теологии-религии (вёл их батюшка из русской старообрядческой церкви, на этих уроках бардак был отменный, мне даже на спине школьного пиджака, одно не здорове умом создание нарисовали свастику, пока я читал что-то). Значит будем бороть систему.

В первую (и последнюю очередь) я решил посмотреть на то, какими функциями обладает моя сетевая новая карта. Опаньки! А у нас есть такие функции как Checksum Offload и Segmentation Offload. В старой карте таких наворотов небыло… Первая мысль – зачем они? Вторая – а что если отключить? Зачем они, мне рассказал Microsoft. А отключение привело к тому, что всё заработало.

Пока весь мир делает это бесплатно, почему-бы не сделать это по другому? LiteSpeed Web Server

Пока Apache HTTP Server Project выпускал свою версию 2.2, делал рефакторинги и прочие вкусные вещи, весёлые ребята из New Jersey, LiteSpeed Technologies взяли и сделали платный HTTP сервер под названием “LiteSpeed Web Server”. Да, такой неизвестный пока никому сервер, который, как утверждают создатели, быстрее преславутого Apache, а PHP 4.4.1 на нём летает на 50% быстрее. Нет, есть конечно бесплатная версия и форум поддержки, но почитав бегло форум, впечатление было никакое.

Из плюсов данного монстра выделяется то, что он почти полностью поддерживает конфиги Apache, и самые популярные модули к Apache у них тоже есть (к примеру mod_rewrite), eстетвенно, CGI/Fast CGI, mod_php, поддержка конфигурации через .htaccess. Подробнее читайте на сайте LiteSpeed Technologies.

Естественно, народ тут-же прикрутил к этому делу Ruby on Rails. Подробную инструкцию по установке RoR на LiteSpeed Web Server можете сами прочесть на сайте 6 short of a dozen.

Официально вышел в свет Apache 2.2

Как, кто и когда это сделал – я не заметил (хотя часто косо поглядывал на Apache 2.2 (beta)). Ну не знаю я, где на сайте Apache HTTP Server Project RSS. Но это не самое главное. Главное, что они это сделали.

Официально заявлено, что изменилось-поправилось-добавилось:

  1. Apache 2.2 использует APR 1.0 API, что означает, что все старые (deprecated) функции выкинут из APR и APR-Util (подробнее на сайте APR).
  2. Ох, какая вкуснятина нас ждёт: Connection Error Logging – логинг ошибок, происходящих во время подключения клиента к серверу. Чего нам всем давно не хватало…
  3. Monitor hook – новая возможность запускать “регулярные” или спланированные (scheduled) задачи. Интересно как оно будет работать и что это даст?
  4. Рефакторинг модуля авторизации, некоторым модулям изменены названия(mod_auth к примеру, переименован в mod_auth_basic и mod_authn_file, а mod_auth_dbm в mod_authn_dbm)
  5. Очень много качественных изменений сделано в модулях mod_cache, mod_disk_cache и mod_mem_cache. Говорят, их довели до рабочего состояния на загруженных серверах
  6. Изменили расположение в конфигурации и теперь распространённые настройки всегда будут под рукой
  7. Добавили директиву GracefulShutdownTimeout
  8. Сделали модуль балансира для модуле proxy
  9. Обновлена библиотека регулярных выражений совместимых с Perl (PCRE) до версии 5.0
  10. Включена поддержка файлов размером более 2 ГБ на современных 32-битовых Unix платформах. Тело запроса теперь тоже может быть более 2 ГБ
  11. Поддержка SQL баз с mod_sql и apr_dbd framework для модулей, которые будут нуждаться в соединениях с SQL базами.
  12. А так же внесены изменения в Event MPM и Smart Filtering, о котором я особо писать не буду – не могу ничего об этом сказать

Ой, а для пользователей MS Windows маленькая паметочка: для вас всего этого ещё нет, или пока нет… Вобщем, если у вас вдруг это заработает, сообщите об этом разработчикам.

Более подробно об новых возможностях Apache 2.2 можно прочесть на официальном сайте в описании новых возможностей HTTP Сервера Apache 2.2.

Что мне не нравиться в инсталляции Apache

Вспоминая хорошим словом Apache HTTP Server, нельзя сказать что там всё идеально. Мне лично не нравиться его инсталяция под платформой Windows. Я бы желал видеть для скачивания не только автоматический инсталляционный скрипт, но и простой zip (как это есть у PHP и MySQL), распаковав который, изменив нужные настройки и набрав в командной строке “Apache2.exe -k install” установил бы сервис (если нужно, то с нужным названием). Всё равно ведь приходиться после установки перебирать конфигурационный файл руками, меняя настройки по умолчанию на нужные тебе, подключая нужные модули, подключая поддержку интерпретаторов и подключая поддержку виртуальных хостов.

Ещё не радует в этом автоматическом инсталляционном скрипте и то, что он по умолчанию ставит Apache под пользователем “Local System”. К примеру автоматический инсталляционный скрипт PostgreSQL сам создаёт пользователя для Postgre. Такое-же мог бы делать и Apache. Тем более Apache выложили прекрасную инструкция как это сделать, но почему бы это было сразу не сделать при инсталляции? Тогда бы себя обсалютно оправдала автоматизированная инсталяция.
А вед если бы он требовал создание отдельного пользователя для себя (как Guest), и делал набор папок так что бы сам писать не мог, без разрешения – снялась бы от части проблема с пермишинами на *nix платформах для новичков. Да и небезопасность была бы повыше немножко.

Притензи к у установке данной совтины на *nix платформе я не имею. Скачал, отконфигурил, сделал, отинсталил и почистил.

Apache HTTP Server – самый популярных HTTP Server

Apache HTTP Server – самый популярных HTTP Server на планете Земля.
С ним я познакомился ещё в 2001 году, когда начинал все свои эпопеи, связанные с работой и WEBом. Тогда, самым распространенной была версия 1.3, впрочем, в плане настроек версия 2 от неё не сильно отличается.
Я считаю, что он прост в установке (относительно), имеет отличные конфигурационныe файлы. К нему подключается куча модулей, таких как mod_php (для поддержки довольно популярного языка PHP), mod_python (для поддержки популяренogo теперь Python), mod_rewrite (для изменения адресации на сайте, под более удобную) и многое другое, что делает из него маленького монстра, готовому к любому бою. Весь список официально поддерживаемух модулей можно найти на сайте модулей.
По моему, Apache HTTP Server самое удобное, что существует, с возможностью установки и на Windows и на *nix платформах, как для серверов разработки WEB-проектов, так и для “боевых” серверов.