Отключаем open_basedir на VDS — это ограничение для shared-хостинга, на VPS только тормозит
Дата публикации: 24.06.2026

Отключаем open_basedir на VDS — это ограничение для shared-хостинга, на VPS только тормозит

Хочу себе такие же кнопки
ccb9a536

Введение

Вы уже знакомы с тем, как работает 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?

  1. Дополнительный системный вызов – каждый file_exists(), include, require и т.п. сначала проверяется в списке разрешённых путей.
  2. Кеширование не работает – PHP не может использовать ускоренный кеш файловой системы, потому что каждый запрос считается «небезопасным».
  3. Блокировка в многопоточном режиме – при большом числе одновременных запросов проверка становится узким местом.

Пример: На сайте с 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

  1. Откройте файл конфигурации (обычно /etc/php/7.4/fpm/php.ini или /etc/php/7.4/apache2/php.ini).
  2. Найдите строку open_basedir.
  3. Закомментируйте её или задайте пустое значение:
;open_basedir = /var/www/:/tmp/:/usr/share/php/
open_basedir =
  1. Перезапустите 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 действительно влиял на производительность?

  1. Бенчмарк до отключения – запустите скрипт, который открывает 1000 файлов, измерьте время microtime(true).
  2. Бенчмарк после отключения – повторите тот же тест.
  3. Сравните результаты – обычно разница составляет 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, где вы предоставляете доступ нескольким клиентам (например, в агентстве).

В остальных случаях, особенно если вы полностью контролируете сервер, отключение открывает путь к более быстрой работе.


Практика для закрепления

  1. Найдите текущие параметры
    Выполните в терминале команду php -i | grep open_basedir. Запишите полученное значение.

  2. Отключите open_basedir
    Откройте файл /etc/php/7.4/fpm/php.ini, закомментируйте строку open_basedir и перезапустите сервис. Проверьте через phpinfo(), что значение пустое.

  3. Сравните время выполнения скрипта
    Скопируйте приведённый выше тестовый скрипт в файл test.php. Запустите его два раза: до и после отключения. Запишите разницу во времени.

  4. Проверьте безопасность
    Попробуйте открыть файл, который находится за пределами вашего сайта, например ../../etc/passwd. Что произойдёт? Почему это важно?

  5. Создайте .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 блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы