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

Обслуживание изображений из двух разных каталогов с помощью Nginx

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

У меня есть веб-сайт, на котором я хочу размещать изображения из разных каталогов. Я думаю, что самый простой способ сделать это - сопоставить что-то вроде website.com/i/image.jpg с папкой в ​​корневом каталоге / i /, поместить туда изображения и покончить с этим. Так что-то вроде этого должно работать, не так ли?

location /i/ {
  /i/$uri;}

Не знаю, мне очень сложно понять синтаксис nginx. Но я также хочу, чтобы URL-адрес был как можно короче, и я считаю, что мог бы реализовать некоторую причудливую логику с регулярным выражением, где я могу вызывать изображения из / i /, не вмешиваясь в изображения, которые вызываются из корневого каталога или других папок. Но я просто озадачен синтаксисом.

Я видел в некоторых других сообщениях на stackexchange людей, пытающихся захватить строку, и понял, что если я сделаю все имена изображений соответствующими определенному шаблону, я могу атаковать его с помощью местоположения регулярного выражения, которое должно совпадать в 100% случаев, поэтому я Можно сделать URL-адрес коротким и по-прежнему отделять изображения от тех, которые мне не нужны (я бы объяснил их различие в назначении, но я чувствую, что это не по теме).

Во всяком случае, я видел сообщение с

location ~ "^/s/([0-9a-zA-Z]{4,6})$" {...

и понял, что это может быть близко к тому, что мне нужно. Все мои файлы для этого местоположения будут иметь длину 6 символов, только a-z, с любым расширением. Я думал, что это будет просто, и могу сделать что-нибудь вроде

location ~ "^([a-z]{6})$" {...

Но как бы я ни ковырялся с синтаксисом, я просто не могу заставить его работать. Может ли кто-нибудь пролить свет на это?

Вы можете попробовать что-то вроде этого

server {
    listen       8989;
    server_name  www.example.net;

    root /vhosts/www.example.net/public_html;

    location ~ "^/([a-z]{6})(.*)\.(jpg|png|svg)$" {
        root /vhosts/www.example.net/static;
    }
}

И загрузите все изображения в /vhosts/www.example.net/static. С настройками выше

www.example.net/qwerty/test.png будет переведен -> /vhosts/www.example.net/static/qwerty/test.png

Это мое предложение, основанное на ALex_hhaответ и подробности в farfieкомментарий выше.

server {
    listen      8989;
    server_name www.example.net;

    root /vhosts/www.example.net/public_html;

    location ~ "^/([a-z]{6})(.*)\.(jpg|png|svg)$" {
        rewrite ^/([a-z]{6})(.*)\.(jpg|png|svg)$" /vhosts/www.example.net/static/$1$2.$3;
    }
}

Ключ к использованию nginx rewrite директива для захвата важных частей из URI, чтобы его можно было сопоставить с любым каталогом.

В root Директива изменяет только корень документа, а URI добавляется к корню документа как есть, что в данном случае не то, что вам нужно.