Ocultar estructura de carpetas en el servidor para imágenes con nginx

Ocultar estructura de carpetas en el servidor para imágenes con nginx

Tengo la siguiente jerarquía de carpetas en mi servidor:
/var/images/d/d8/d82fa6c3eed/image.png

La estructura del directorio se crea a partir de un hash MD5 y se divide en subcarpetas.

Me gustaría mostrar las imágenes a los usuarios web con Nginx, pero no quiero exponer la estructura del directorio. Por ejemplo, yo hagonoQuiero servir los archivos como este:
http://domain.tld/d/d8/d82fa6c3eed/image.png

Quiero servirle algo como:
http://domain.tld/b/4324re3fg34f6td/image.png

También estoy usando el secure linkmódulo nginx, pero debes especificar el directorio para obtener la imagen, así:
http://domain.tld/b/<secure link MD5 hash>/path/to/file.png

que se reescribe en:
http://domain.tld/images/path/to/file.png?md5=<secure link md5>

y no quiero especificar la ruta del directorio específico real en mi sistema de archivos para obtener el archivo. Estaba pensando en las siguientes líneas:

  • el cliente puede enviar algún tipo de valor MD5 que represente la ruta del directorio al archivo, y NGINX insertará / cada N carácter. es posible?
  • envíe la ruta del directorio codificada en base64 y haga que NGINX la decodifique y la redirija internamente allí. ¿Y esto?
  • ¿Quizás usar un módulo adicional para esto, como el módulo openresty?

¿Puedo lograr esto...?

Mi configuración de 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; }
    }
}

Respuesta1

No lo he usado secure_link, así que no puedo comentar sobre esa parte de tu propuesta. Pero un error obvio en su configuración es que debería usarlo rewrite...lastsi desea que el bloque procese el URI reescrito location /images/. El breaksufijo hace que el URI se procese dentro de la misma ubicación.

Vereste documentopara detalles.

información relacionada