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 link
mó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...last
si desea que el bloque procese el URI reescrito location /images/
. El break
sufijo hace que el URI se procese dentro de la misma ubicación.
Vereste documentopara detalles.