Вопрос: mod_xsendfile с символическими ссылками


Я столкнулся с проблемой, используя xsendfile с моим приложением Rails 3.

Я использую capistrano для управления развертываниями и в каждой версии, есть символическая ссылка на каталог shared / assets (например, / var / www / site / releases / 1234 / assets => / var / www / site / shared / assets ). Проблема в том, что XSendFile, похоже, не следует за символическими ссылками. В моих журналах apache я вижу следующую ошибку:

The given path was above the root path: xsendfile: unable to find file: /var/www/site/releases/20110406205607/assets/pdfs/2/original/test.pdf

У меня есть конфигурация XSendFilePath, установленная как

XSendFilePath /var/www/site/shared/assets

Если я переключу конфигурацию на:

XSendFilePath /var/www/site/releases

Тогда все работает нормально. Поэтому у меня есть пара вопросов:

1) Есть ли способ заставить XSendFilePath следовать символической ссылке?

2) Существует ли риск безопасности при настройке XSendFilePath на мой каталог релизов? Другими словами, открываю ли я доступ ко всему этому директорию?


8


источник


Ответы:


Вы создаете ссылку, используя after "deploy:finalize_update" задача подобна этому:

task :storage_link, :except => { :no_release => true } do
    run "ln -nFs #{deploy_to}/shared/assets #{latest_release}/assets"
end

Это позволяет XSendFilePath видеть ссылку как /var/www/site/current/assets который помещает его в корневой путь.

Также убедитесь, что пользователь, на котором работает ваше приложение, имеет права на запись в / var / www / site / shared / assets.


7