Битрикс на обычном хостинге - настройка без веб-окружения
Общий хостинг даёт панель управления вместо консоли, и окружение здесь настраивает не меню, а руки. Разбираем, что на такой площадке настраивается из панели и файлов сайта, а что не заработает вовсе.
Решение
Что проверяем до покупки тарифа
Сверяем тариф с требованиями платформы:
PHP 8.2.0 и выше # с 01.02.2026 это минимум, рекомендуется 8.4MySQL 8.0+ # кодировка utf8mb4, не utf8mb3Apache 2.0+ # поддержка .htaccess обязательнаOPcache # акселератор обязателенGD с FreeType, XML/DOM # изображения, CAPTCHA, система обновленийmbstring, Zlib, ZIP # обязательные расширенияOpenSSL, Hash, mysqli # обязательные расширенияsuhosin, mod_security # платформой запрещеныИнтерпретатор PHP и доступ по FTP или SSH обязаны работать от одного пользователя. Иначе файлы, созданные продуктом, окажутся недоступны на запись через FTP. Продукт ставится только в корневую папку сайта: из подкаталога он не работает.
Настройки PHP, когда доступа к серверу нет
Задаём критические значения php.ini через панель:
memory_limit = 256M ; минимум 64M для редакции «Бизнес»max_input_vars = 10000max_execution_time = 300post_max_size = 1024Mupload_max_filesize = 1024Mdefault_charset = UTF-8pcre.backtrack_limit = 1000000short_open_tag = Onallow_url_fopen = Onmbstring.func_overload = 0 ; параметр должен быть удалён или обнулёнopcache.max_accelerated_files = 100000Панель хостинга держит эти значения в разделе выбранной версии PHP, там же
включаются расширения GD с FreeType, XML/DOM, mbstring, ZIP, OpenSSL и mysqli.
Параметр mbstring.func_overload платформа не поддерживает с главного модуля
20.100.0, и он блокирует установку обновлений.
Директивы PHP в корневом файле настроек каталога:
<IfModule mod_php7.c> php_flag session.use_trans_sid off php_value default_charset UTF-8</IfModule>Обёртка <IfModule> здесь не украшение. При PHP в режиме FastCGI или PHP-FPM
директивы php_value и php_flag невалидны, и сервер отвечает ошибкой 500 на
каждый запрос к сайту.
Права на файлы и каталоги
Выставляем права сразу после распаковки дистрибутива:
find . -type d -exec chmod 0755 {} ';' # каталогиfind . -type f -exec chmod 0644 {} ';' # файлыЧасть хостингов навязывает каталогам права 0711, и это тоже частая причина
ошибки 500 вместе со сбоями записи кэша.
Закрепляем права константами в dbconn.php:
define('BX_FILE_PERMISSIONS', 0644);define('BX_DIR_PERMISSIONS', 0755);Без констант загруженные картинки и файлы кэша получают права по умолчанию от хостинга, и часть содержимого сайта окажется недоступна веб-серверу.
Задания по расписанию из панели
Отключаем выполнение агентов и почтовых событий на хитах:
COption::SetOptionString("main", "agents_use_crontab", "N");COption::SetOptionString("main", "check_agents", "N");Заводим задание планировщика в панели хостинга:
*/1 * * * * /usr/bin/php -f /home/user/site/bitrix/php_interface/cron_events.phpСам скрипт cron_events.php кладём в каталог /bitrix/php_interface/, а его
состав разбирается страницей про агенты. В консоли и в веб-сервере общего хостинга
работают разные сборки PHP со своими файлами настроек. Поэтому путь к интерпретатору
берём из панели, а не из примера. Взамен агент получает таймаут базы 600 секунд
вместо 60 в обычном запросе.
Почта с общей площадки
Задаём размер пачки писем из очереди:
COption::SetOptionString("main", "mail_event_bulk", "20"); // по умолчанию 5Очередь почтовых событий разбирает то же задание расписания, что и агентов. Само письмо платформа отдаёт локальной программе отправки хостинга, а её обратный адрес часто не совпадает с доменом сайта. Почтовые службы такое письмо кладут в спам, поэтому отправку с общей площадки переводят на внешний SMTP-сервер своего домена.
Что на общем хостинге не заработает
Список того, чего на площадке нет и не появится:
композитный кеш из nginx # отдавать статическую копию некомуmemcached и Redis # сторонние службы, их ставит хостингPush и RTC # нужен сервис NodeJS и свои портыпоиск Sphinx # отдельная служба на серверевеб-кластер и слейв базы # нужна вторая машинаКомпозит при этом включается и работает, но страницу собирает PHP. Заголовок
ответа X-Bitrix-Composite со значением Cache (200) как раз означает, что отдал
её не nginx. Кэш остаётся файловым, поиск - штатным модулем, а обмен сообщениями
переходит с подписки на опрос.
Проверка результата штатным инструментом
Кладём в корень сайта скрипт требований:
wget https://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.phpСкрипт открывают в браузере, и он сверяет серверную часть до установки продукта. После установки те же расхождения показывает штатная проверка системы, и красные пункты её отчёта разбираются отдельной страницей.
Типичные проблемы
После правки корневого файла сайт отдаёт 500 на всех страницах.
Директивы php_value и php_flag положены без обёртки <IfModule>. При FastCGI и PHP-FPM они невалидны, и веб-сервер обрывает обработку запроса.
Проверка ругается на параметры настройки UTF и константу BX_UTF.
У выбранной в панели версии PHP значение default_charset отличается от UTF-8. Помогает строка php_value default_charset UTF-8 в корневом файле каталога.
Скрипт из планировщика панели молчит, а из браузера отрабатывает.
Консольная сборка PHP на хостинге своя, со своим файлом настроек и своей версией. Выполнение обрывается на подключении пролога, и в почту ничего не уходит.
Тестовый скрипт видит memcached, а платформа его не использует.
Служба кэша на общем хостинге живёт отдельно от сайта и настроена не под требования платформы. Ждать от неё поведения из инструкций к окружению не стоит.
Восстановление крупного архива обрывает соединение.
Свободного места нужно примерно втрое больше размера копии. Лимиты времени при FastCGI задаёт сервер, и правкой php.ini их не обойти.
Частые вопросы
Как перенести сайт с локальной машины на обычный хостинг?
Только штатными средствами: резервная копия плюс restore.php в корне сайта. Архивы платформы в формате GNU tar, и распаковывать их должен именно этот скрипт, а не FTP-клиент. Владелец файла - пользователь веб-сервера, свободного места нужно втрое больше копии.
Почему после смены версии PHP в панели сайт начал выдавать ошибки?
Старая версия продукта не знает новой ветки языка. Порядок обратный привычному: сначала обновляем продукт до текущей версии, и только потом переключаем ветку PHP в панели. Отдельно проверяем, что mbstring.func_overload обнулён.
Обязателен ли .htaccess, или можно обойтись без него?
Поддержка файла обязательна, это требование к хостингу. Через него идёт обработка ЧПУ: все несуществующие файлы и каталоги mod_rewrite направляет на /bitrix/urlrewrite.php. Без этого работают только прямые адреса физических файлов.
Можно ли обойтись без задания расписания на общем хостинге?
Можно: агенты и почтовые события выполнятся на хитах посетителей. Но в обычном запросе агенту достаётся таймаут базы 60 секунд вместо 600, поэтому тяжёлые операции обрываются на середине. Агент считается тяжёлым, если работает дольше десяти минут.
Когда пора уезжать с общего хостинга на своё окружение?
Когда проекту понадобились memcached или Redis, отдача композитного кеша из nginx, push-уведомления, поиск Sphinx или разнесение базы на второй сервер. Ни одну из этих служб общий хостинг поставить не даст.
Смежное
- BitrixVM и веб-окружение - оглавление подтемы
- Инфраструктура и хостинг - устройство площадки целиком
- Проверка системы: что смотрит и что чинить первым - запуск инструмента и чтение отчёта
- Установка и настройка BitrixVM - что получаем при переезде на окружение
- Файл .htaccess: что работает, что игнорируется, что роняет сайт - корневой файл настроек каталога целиком
- Права на файлы и папки - права структуры поверх прав файловой системы
- Агенты не выполняются: разбор причин - почему агент не отработал по расписанию
- Настройка отправки почты: локальная отправка и SMTP - внешний сервер вместо локальной программы
- Перенос сайта на другой сервер - переезд копией и restore.php
- Ошибки 500 и 502: где искать причину - разбор кода ответа после правки файла
- Переход на новую версию PHP - порядок обновления продукта и ветки языка
- Мастер установки не проходит - разбор отказа мастера на настроенной руками площадке