Назад | Перейти на главную страницу

как использовать символическую ссылку с другой «базой» (nginx)

У меня есть среда chroot с Apache и некоторым веб-сайтом.

Вне chroot у меня есть nginx, который перенаправляет запросы на Apache.

Однако есть некоторые каталоги, которые я хочу, чтобы nginx работал быстрее, поэтому я это сделал:

location ^~ /uploads/ {
    alias   /VM.01/sites/domain.com/uploads/;

    expires 90d;
}

Это работает нормально, но внутри /uploads В папке есть символическая ссылка, относящаяся к chroot, что-то вроде /sites/images.

Когда nginx запрашивает этот файл, символическая ссылка больше не работает.

К сожалению, мы не можем изменить символическую ссылку, потому что это сделано сторонним программным обеспечением.

Я могу придумать два обходных пути, но оба мне не нравятся.

  1. установить nginx в chroot. затем «внешний» nginx перенаправляет на «chroot» nginx, затем, если необходимо, запрос перенаправляется на «chroot» Apache.
    это слишком сложно, и данные проходят через 3 «слоя». (Я знаю, что могу сделать 2 слоя)

  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/;
    }
}