Eu tenho a seguinte hierarquia de pastas no meu servidor:
/var/images/d/d8/d82fa6c3eed/image.png
A estrutura de diretórios é criada a partir de um hash MD5 e dividida em subpastas.
Gostaria de exibir as imagens para os usuários da web com o Nginx, mas não quero expor a estrutura de diretórios. Por exemplo, eu não quero servir os arquivos da seguinte forma:
http://domain.tld/d/d8/d82fa6c3eed/image.png
Eu quero servir algo como: http://domain.tld/b/4324re3fg34f6td/image.png
Eu também estou usando o módulo nginx secure link
, mas você precisa especificar o diretório para obter a imagem, assim: http://domain.tld/b/<secure link MD5 hash>/path/to/file.png
que é reescrito em: http://domain.tld/images/path/to/file.png?md5=<secure link md5>
e eu não quero especificar o caminho do diretório específico real no meu sistema de arquivos para obter o arquivo. Eu estava pensando nas seguintes linhas:
- o cliente pode enviar algum tipo de valor MD5 que representa o caminho do diretório para o arquivo, e o NGINX irá inserir / todo caractere N. Isso é possível?
- envia o caminho do diretório codificado em base64 e faz com que o NGINX o decodifique e redirecione internamente para lá. E isso?
- talvez use um módulo extra para isso, como o módulo openresty?
Posso conseguir isso ...?
Minha configuração do 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; }
}
}