Ocultar estrutura de pastas no servidor para imagens com nginx

1

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; }
    }
}
    
por Nemdr 05.09.2018 / 12:31

1 resposta

0

Eu não usei secure_link , por isso não posso comentar sobre essa parte da sua proposta. Mas um erro óbvio na sua configuração é que você deve usar rewrite...last se quiser que o URI reconfigurado seja processado pelo bloco location /images/ . O sufixo break faz com que o URI seja processado no mesmo local.

Veja este documento para detalhes.

    
por 05.09.2018 / 12:54