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
мне кажется не правильным, да и библиотеку фреймворка ради этого переписывать. А их (фреймворков) много, каждый не перепишешь.

Заранее спасибо.
  • Вопрос задан
  • 7038 просмотров
Пригласить эксперта
Ответы на вопрос 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 эти симлинки ссылаются на пустоту.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽