пятница, 16 марта 2012 г.

Birtix + IIS = shit

Если вы задумали сделать себе сайт на Битриксе, не буду вас отговаривать. В чём-то Битрикс хорош. Если вы задумали сделать себе сайт на виндоплатформе, а в качестве веб-сервера использовать IIS, то не буду вас отговаривать. Возможно, в этом тоже есть какой-то смысл.

Но если вы задумали сделать себе сайт на Битриксе (который написан на PHP) и развернуть его на винде под IIS, то я сразу хочу сказать: вы с этим наедитесь говна досыта. У нас есть заказчики, которые захотели себе корпоративные порталы на Битриксе, и в качестве платформы, как мы их ни уговаривали, выбрали виндоус-сервер плюс MSSQL плюс IIS. Наверное, тут должно быть что-то написанное на дотнете, но мы не пишем на дотнете, только на PHP. О, ужас и кошмар. Такого количества внезапных необъяснимых поломок у нас никогда ещё не было. И вряд ли будет, потому что наш CEO дал себе зарок больше никогда не связываться с PHP/Bitrix+IIS+MSSQL.

Если вы вычитали где-то на сайте Битрикса, что он (пхп-версия в смысле) идеально подходит для работы на указанной платформе с указанной конфигурацией, я вас вынужден разочаровать. Это маркетинговая замануха, точно такая же, как у майкрософт при установке винды.

Начать с того, что Битрикс всецело опирается на некоторые переменные из массива $_SERVER в своей работе, а именно — DOCUMENT_ROOT и REQUEST_URI. Потому что, вестимо, разрабатывался под апачем. А вот IIS эти переменные не объявляет. Для $_SERVER['DOCUMENT_ROOT'] можно написать в php.ini что-то типа doc_root = C:/my_bitrix_site или тупо жёстко задать в dbconn.php. А вот $_SERVER['REQUEST_URI'] придётся собирать в том же dbconn.php вручную. Дело осложняется тем, что иногда IIS объявляет REQUEST_URI, в тех местах, где в Битриксе ЧПУ, и надо те места исключать, потому что тогда в тех местах AJAX не будет работать.

Вы ещё не передумали? А впереди то, из-за чего многие выбирают IIS — это более простая настройка NTLM-авторизации. Это такой механизм авторизации на портале, называемый ещё windows-авторизация, когда человек логинится на портал под тем же пользователем, под которым зашёл на компьютер. Для этого, разумеется, всё — и пользователь, и компьютер, и сервер с порталом — должно входить в виндовый домен, и всё должно быть правильно настроено в Active Directory. Да, действительно, IIS нативно поддерживает подобный вид авторизации. И, по идее, никаких проблем с этим быть не должно. Однако, если включить NTLM-авторизацию, Битрикс выдаёт ошибки при самодиагностировании, так как не может подключиться сам к себе через сокеты. Ну и, как следствие, могут возникнуть определённого рода сложности с WebDAV. Я пробовал включать анонимную авторизацию в IIS для некоторых отдельных папок, но, похоже, эффекта это не вызымело. В апаче эта проблема рещается легко в .htaccess одной строчкой.

Вы ещё не передумали? А IIS не поддерживает реврайт. Всё ЧПУ в Битриксе для IIS делается через жопу, то есть через 404 ошибку.

На быстродействие не рассчитывайте. NTFS это, наверное, в каких-то случаях и хорошая файловая система, но для хранения огромной кучи мелких файлов, которой, по сути, является Битрикс, и быстрого к ним доступа малопригодна. Между PHP и MSSQL в большинстве случаев ещё имеется слой ODBC, который тоже замедляет работу. Про нативный драйвер для PHP без ODBC я не слышал (то есть это не означает, что его нет). Все перепробованные мной акселераторы PHP под винду — унылое говно.

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.