Назад | Перейти на главную страницу

Может ли php-fpm поддерживать динамическую установку open_basedir для нескольких виртуальных хостов с одним пулом пользователей?

Я столкнулся с проблемой, когда попытка динамически установить open_basedir под nginx (и apache) для php-fpm «просачивается» на другие vhosts при запуске php-fpm от имени пользователя «none» (по устаревшим причинам).

с помощью

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/mike/htdocs";

и

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/adam/htdocs";

и т.д., где это необходимо для каждого виртуального хоста (php 5.3.20)

phpinfo показывает, что установлен правильный open_basedir, но в конце концов (довольно быстро) я начинаю получать ошибки, когда один из виртуальных хостов сталкивается с неправильным open_basedir, пытаясь выполнить программу для «mike», но имея open_basedir для «adam» .

Поскольку fastcgi_param в основном устанавливает среду для php-fpm, я думаю, что происходит то, что тот же рабочий изменит свою среду, пока он все еще обрабатывает файл php.

Каким-то образом серверы, такие как litespeed, которые также используют php-процесс fastcgi (работающий как никто), получают это право и работают правильно, когда open_basedir может быть установлен извне без «кровотечения» между виртуальными хостами.

Так что мне интересно, есть ли уловка или обходной путь, который я могу использовать, чтобы продолжать работать как «никто» и сохранять среду между vhosts.

Я должен отметить, что использую сокеты unix, а не tcp / ip, но я не думаю, что это имеет значение.

Я нашел здесь упоминание об этой же проблеме:

http://forum.nginx.org/read.php?3,234856

Они сказали, что смогли обойти это с помощью новой директивы [host = xyz.xyz] для php.ini, которая стала доступной после версии 5.3.

В руководстве по php.net отображается предупреждение о том, что это не работает должным образом с php-fpm, но этому комментарию два года, и, возможно, он был устранен.

http://php.net/manual/en/ini.sections.php#101689