Отключаем open_basedir на VDS — это ограничение для shared-хостинга, на VPS только тормозит
Хочу себе такие же кнопкиВведение
Вы уже знакомы с тем, как работает Bitrix на обычном VPS/VDS и почему иногда сайт «тормозит». Одной из скрытых причин может быть директива open_basedir – ограничение, придуманное для shared‑хостинга. На вашем VDS (или VPS) оно не только не защищает, но и добавляет лишнюю нагрузку на файловую систему, замедляя работу скриптов. В этом уроке вы узнаете, что такое open_basedir, почему его стоит отключать на VDS, как это сделать безопасно и какие подводные камни могут возникнуть.
1. Что такое open_basedir и зачем он нужен?
| Параметр | Описание | Где обычно включён |
|---|---|---|
| open_basedir | Ограничивает PHP‑скрипты доступом только к указанным каталогам. Если скрипт пытается открыть файл за пределами этих путей, PHP выдаёт ошибку “open_basedir restriction in effect”. | Shared‑хостинг (много пользователей на одном сервере) |
| php.ini | Файл конфигурации PHP, где задаются глобальные директивы. | На всех типах хостинга |
| .user.ini | Локальный файл конфигурации, переопределяющий параметры для конкретного сайта. | На VPS/VDS, если администратор хочет задать свои ограничения |
Почему это работает на shared‑хостинге?
Представьте, что несколько людей живут в одном доме и каждый имеет свою комнату. Чтобы никто не мог зайти в чужую комнату, хозяин дома ставит замки на двери. open_basedir – это такие «замки» для файловой системы: каждый пользователь видит только свою «комнату».
Что происходит на VDS?
На VDS у вас один «дом» – один пользователь (root) и несколько сайтов, но они находятся под вашим полным контролем. Замки уже не нужны, а каждый запрос к файлу теперь проходит через дополнительный слой проверки, что тратит процессорное время и вводит задержку в несколько миллисекунд. При большом трафике эти миллисекунды складываются в секунды, а ваш сайт начинает «тормозить».
2. Почему open_basedir тормозит на VDS?
- Дополнительный системный вызов – каждый
file_exists(),include,requireи т.п. сначала проверяется в списке разрешённых путей. - Кеширование не работает – PHP не может использовать ускоренный кеш файловой системы, потому что каждый запрос считается «небезопасным».
- Блокировка в многопоточном режиме – при большом числе одновременных запросов проверка становится узким местом.
Пример: На сайте с 10 000 запросов в минуту каждый запрос открывает 5 файлов. При включённом open_basedir проверка добавляет ~2 мс на запрос → 10 000 × 5 × 2 мс = 100 секунд дополнительного процессорного времени в минуту.
3. Как безопасно отключить open_basedir на VDS
3.1. Проверьте текущие настройки
# Показать значение директивы в php.ini
php -i | grep open_basedir
# Или посмотреть в конкретном файле конфигурации
cat /etc/php/7.4/fpm/php.ini | grep open_basedir
Если вывод выглядит так:
open_basedir => /var/www/:/tmp/:/usr/share/php/ => /var/www/:/tmp/:/usr/share/php/
— значит ограничение активно.
3.2. Отключаем в глобальном php.ini
- Откройте файл конфигурации (обычно
/etc/php/7.4/fpm/php.iniили/etc/php/7.4/apache2/php.ini). - Найдите строку
open_basedir. - Закомментируйте её или задайте пустое значение:
;open_basedir = /var/www/:/tmp/:/usr/share/php/
open_basedir =
- Перезапустите PHP‑FPM или Apache:
systemctl restart php7.4-fpm
# или
systemctl restart apache2
3.3. Отключаем в .user.ini (если используется)
Если в корне сайта есть файл .user.ini с директивой, удалите её или замените:
open_basedir =
3.4. Проверка после изменения
Создайте файл info.php в корне сайта:
<?php phpinfo(); ?>
Откройте его в браузере и найдите блок open_basedir. Должно быть пусто или no value.
4. Что делать, если полностью отключить open_basedir нельзя?
Иногда администраторы оставляют ограничение по соображениям безопасности (например, на сервере, где несколько клиентов делят один VDS). В таком случае можно:
| Способ | Как работает | Плюсы | Минусы |
|---|---|---|---|
| Разрешить только нужные каталоги | Укажите в open_basedir только те пути, где находятся файлы вашего сайта и временные директории. |
Сохраняет часть защиты. | Требует точного указания путей. |
| Переместить файлы в разрешённый каталог | Поместите всё, что требуется, в /var/www/your_site/ и укажите только его. |
Упрощает конфиг. | Нужно менять структуру проекта. |
Использовать open_basedir в сочетании с disable_functions |
Отключите опасные функции (exec, system и т.п.) в php.ini. |
Добавляет слой защиты. | Не решает проблему производительности полностью. |
5. Как проверить, что open_basedir действительно влиял на производительность?
- Бенчмарк до отключения – запустите скрипт, который открывает 1000 файлов, измерьте время
microtime(true). - Бенчмарк после отключения – повторите тот же тест.
- Сравните результаты – обычно разница составляет 10‑30 % ускорения.
<?php
$start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
file_exists('/var/www/html/file'.$i.'.txt');
}
$elapsed = microtime(true) - $start;
echo "Время: {$elapsed} сек";
?>
6. Как избежать новых проблем после отключения
| Проблема | Как её избежать |
|---|---|
| Неавторизованный доступ к файлам | Установите правильные права доступа (chmod 750 для каталогов, chmod 640 для файлов) и владельца (chown www-data:www-data). |
| Случайные ошибки в скриптах | Проверьте, что в коде нет жёстко прописанных абсолютных путей, выходящих за пределы вашего сайта. |
| Проблемы с другими расширениями | Некоторые CMS (в том числе Bitrix) могут использовать open_basedir для своих модулей. Проверьте логи (/var/log/php7.4-fpm.log) после отключения. |
7. Когда open_basedir всё‑таки нужен?
- На shared‑хостинге, где несколько клиентов работают на одном сервере.
- На VDS, где вы предоставляете доступ нескольким клиентам (например, в агентстве).
В остальных случаях, особенно если вы полностью контролируете сервер, отключение открывает путь к более быстрой работе.
Практика для закрепления
-
Найдите текущие параметры
Выполните в терминале командуphp -i | grep open_basedir. Запишите полученное значение. -
Отключите open_basedir
Откройте файл/etc/php/7.4/fpm/php.ini, закомментируйте строкуopen_basedirи перезапустите сервис. Проверьте черезphpinfo(), что значение пустое. -
Сравните время выполнения скрипта
Скопируйте приведённый выше тестовый скрипт в файлtest.php. Запустите его два раза: до и после отключения. Запишите разницу во времени. -
Проверьте безопасность
Попробуйте открыть файл, который находится за пределами вашего сайта, например../../etc/passwd. Что произойдёт? Почему это важно? -
Создайте .user.ini
В корне сайта создайте файл.user.iniс строкойopen_basedir =. Перезапустите PHP‑FPM и убедитесь, что значение всё ещё пустое.
Ответьте на вопросы в комментариях к уроку, и мы разберём их вместе!
Дополнительные ресурсы
- Официальная документация PHP о open_basedir: php.net
- Хостинг‑провайдер VDSina – подбор VDS под ваш проект: VDSina
Удачной оптимизации! 🚀
CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса