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

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

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

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 140 000 до 200 000 руб.
Веб-студия Asterica Воронеж
от 100 000 руб.
Big Fish Москва
от 80 000 до 120 000 руб.