Nginx + php-fpm + chroot + symlink = brokenlink?

Доброго времени суток.
Окружение вообщем-то стандартное:
Ubuntu c nginx'ом на борту. Который работает с php-fpm который в свою очередь заперт в своей клетке и работает через chroot параметр, каждый хост от своего пользователя.
Chroot-path:
/home/www/vhostdata/example.dev/
Сам проект в
/home/www/vhostdata/example.dev/home/htdocks/
но для chroot-нутого пользователя этот путь выглядит как -
/home/htdocks/
Отсюда и проблемма.
В моем случае это yii фреймворк. Assets Manager создает symlink'и исходя из chroot'а.
То есть - nginx идет в /home/www/vhostdata/example.dev/home/htdocks/web/assets и видит там следующее:
lrwxrwxrwx 1 example.dev example.dev   39 дек.  24 00:37 509ca038 -> /home/htdocks/web/themes/default/assets
lrwxrwxrwx 1 example.dev example.dev   64 дек.  24 00:37 5d465bfb -> /home/htdocks/web/protected/vendors/framework/zii/widgets/assets
lrwxrwxrwx 1 example.dev example.dev   55 дек.  24 00:37 7b30adf2 -> /home/htdocks/web/protected/extensions/bootstrap/assets
lrwxrwxrwx 1 example.dev example.dev   59 дек.  24 00:37 a0ef63b0 -> /home/htdocks/web/protected/vendors/framework/web/js/source
lrwxrwxrwx 1 example.dev example.dev   56 дек.  24 00:37 f5a86c4c -> /home/htdocks/web/protected/extensions/highcharts/assets


И естественно воспринимает это дело как brokenlink, ибо сам nginx работает вне chroot'тнутой среды и для него эти линки действительно ссылаются в никуда.

Кто встречался с данной проблеммой? Как решали? Делать в php symlink'и на относительные адреса
ln -s ../web/assets 7b30adf2
мне кажется не правильным, да и библиотеку фреймворка ради этого переписывать. А их (фреймворков) много, каждый не перепишешь.

Заранее спасибо.
  • Вопрос задан
  • 7050 просмотров
Пригласить эксперта
Ответы на вопрос 4
Ramzeska
@Ramzeska
Попробуйте использовать хардлинки.
ln ЦЕЛЬ ИМЯ_ССЫЛКИ
По умолчанию создаются жёсткие ссылки
Ответ написан
Комментировать
@gudron Автор вопроса
из мана убунты на ln
-d, -F, --directory
allow the superuser to attempt to hard link directories (note: will probably fail due to system restrictions, even for the superuser)

 Тоесть по умолчанию создать хардлинк на директорию нельзя. А если можно то только супер юзеру, и только на линуксах. На MacOSX такого параметра у ln нету.На freebsd  возможно тоже, проверить неначем в данный момент.

Плюс ко всему нужно изменять поведение  yii фреймворка, или любого другого фреймворка, что не есть хорошо.

В общем - вариант, но достаточно условный. Хотелось бы более универсальное решение.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
А из чего следует, что проблема в Yii? У меня целая пачка установок Yii крутящихся в chroot-ах и все работает без проблем. Но Yii 1.1.14 симлинке в assets не создает.
Ответ написан
Комментировать
@gudron Автор вопроса
проблема не в yii. и я 2 раз уже об этом упоминал.
Конкретно у вас возможно не установлена опция в yii protected/config/main.php
'assetManager' => array(
      'class'         => 'CAssetManager',
      'linkAssets'    => true
),

Проблема общая. Симлинки создаются относительно chroot'ного пути. и вне chroot'a эти симлинки ссылаются на пустоту.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы