У меня есть среда chroot с Apache и некоторым веб-сайтом.
Вне chroot у меня есть nginx, который перенаправляет запросы на Apache.
Однако есть некоторые каталоги, которые я хочу, чтобы nginx работал быстрее, поэтому я это сделал:
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
}
Это работает нормально, но внутри /uploads
В папке есть символическая ссылка, относящаяся к chroot, что-то вроде /sites/images
.
Когда nginx запрашивает этот файл, символическая ссылка больше не работает.
К сожалению, мы не можем изменить символическую ссылку, потому что это сделано сторонним программным обеспечением.
Я могу придумать два обходных пути, но оба мне не нравятся.
установить nginx в chroot. затем «внешний» nginx перенаправляет на «chroot» nginx, затем, если необходимо, запрос перенаправляется на «chroot» Apache.
это слишком сложно, и данные проходят через 3 «слоя». (Я знаю, что могу сделать 2 слоя)
создать символическую ссылку '/ sites /' вне chroot.
это нарушает инкапсуляцию, а также что, если есть второй chroot, которому нужен тот же каталог.
Сейчас я использую вариант 2
Почему бы тебе не добавить еще location
блок для этой символической ссылки, например
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
}
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
expires 90d;
}
Или вы можете использовать вложенные местоположения для наследования параметров внешнего местоположения:
location ^~ /uploads/ {
alias /VM.01/sites/domain.com/uploads/;
expires 90d;
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
}
}
Кроме того, когда location
совпадает с последней частью alias
значение директивы, документация nginx рекомендует использовать root
вместо этого директива:
location ^~ /uploads/ {
root /VM.01/sites/domain.com;
expires 90d;
location ^~ /uploads/symlink/ {
alias /VM.01/sites/images/;
}
}