Отключаем 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 - онлайн фото с вебкамеры с эффектами
Чат рулетка 2026: Интерактивные элементы
Чат-рулетка: случайный собеседник в одно нажатие
Чат рулетка в 2026: будущие функции
Интерьер с использованием текстиля
Как настроить бэкапы для вашего сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как обновить PHP на хостинге Host.bg
Как решить проблемы с загрузкой сайта на Host.bg
Какие бывают ЛОР болезни у детей
Калькулятор зарплаты SEO-оптимизатора
Кассовые терминалы с оплатой картами
Монетизация через платные услуги
Мск: ИП или ООО — лучший старт для бизнеса?
Общение в интернете без риска
Общение вживую через экран
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Ошибки при настройке хостинга и их решения
Проблемы с доменами и их решения на хостинге Host.bg
Сколько стоит биткоин
Сравнение ценовых диапазонов хостинга Host.bg
Сумки с бусинами
Техника для строительства загородных трасс
Трубная продукция для трубопроводных конструкций
Узбекские фильмы фэнтези
Видео рулетка 18+
Видеочат с случайным собеседником онлайн
Видеообщения по всему миру
рейтинг хостингов 2026 Быстрые VDS серверы