Скрыть структуру папок на сервере для изображений с помощью nginx

Скрыть структуру папок на сервере для изображений с помощью nginx

У меня на сервере следующая иерархия папок:
/var/images/d/d8/d82fa6c3eed/image.png

Структура каталогов создается на основе хэша MD5 и разбивается на подпапки.

Я хотел бы обслуживать изображения веб-пользователям с помощью Nginx, но не хочу раскрывать структуру каталогов. Например, я делаю так:нетхотите обслуживать файлы следующим образом:
http://domain.tld/d/d8/d82fa6c3eed/image.png

Я хочу подать его примерно так:
http://domain.tld/b/4324re3fg34f6td/image.png

Я также использую secure linkмодуль nginx, но вам придется указать каталог для получения изображения, например так:
http://domain.tld/b/<secure link MD5 hash>/path/to/file.png

который переписывается в:
http://domain.tld/images/path/to/file.png?md5=<secure link md5>

и я не хочу указывать фактический конкретный путь к каталогу в моей файловой системе, чтобы получить файл. Я думал о следующем:

  • клиент может отправить некое значение MD5, представляющее путь к каталогу файла, и NGINX вставит / через каждые N символов. Возможно ли это?
  • отправить путь к каталогу, закодированный в base64, и заставить NGINX декодировать его и внутренне перенаправить туда. А это?
  • может быть, использовать для этого дополнительный модуль, например, модуль OpenResty?

Могу ли я этого добиться?

Мой конфиг nginx:

server {
    ..
    root /var/www/html;
    ..
    location /b/ {
        rewrite ^/b/([a-zA-Z0-9_\-]+)/([a-zA-Z0-9_\-]+)/(.*)$ /images/$2/$3?md5=$1 last;
    }
    location /images/ {
        internal;
        secure_link $arg_md5;
        secure_link_md5 '$uri mysecretkey';
        if($secure_link = "") { return 404; }
        if($secure_link = "0") { return 410; }
    }
}

решение1

Я не использовал secure_link, поэтому не могу прокомментировать эту часть вашего предложения. Но очевидная ошибка в вашей конфигурации заключается в том, что вы должны использовать , rewrite...lastесли хотите, чтобы переписанный URI обрабатывался блоком location /images/. breakСуффикс заставляет URI обрабатываться в том же месте.

Видетьэтот документдля получения подробной информации.

Связанный контент