Usando o nginx try_files com várias árvores de diretórios

2

Eu gostaria de ter solicitações de manipulação nginx para um diretório específico, verificando se esse caminho / arquivo existe em vários diretórios separados. Por exemplo, se minha raiz de diretório tivesse o seguinte:

images/siteA/foo.jpg
images/siteB/b/bar.jpg
images/siteC/example.jpg

Eu gostaria que http://example.com/images/foo.jpg retornasse o arquivo foo.jpg , http://example.com/b/bar.jpg para retornar o arquivo bar.jpg e o quarto.

Eu tentei o seguinte, mas ele só fica bloqueado em loops de redirecionamento (e eu não quero que ele redirecione, mas na verdade veicule o arquivo para essa URL):

  location /images/ {
    try_files /siteA/images/
              /siteB/images/
              /siteC/images/ =404;

  } 

Eu também tentei usar grupos de captura como location ~/images/(.*)/ e adicionando $1 ao final dos URLs. Estou um pouco confuso sobre a documentação e não sei como conseguir isso com o nginx.

    
por djsumdog 11.11.2018 / 06:25

1 resposta

2

Você precisará usar uma expressão regular location para capturar a parte do URI após /images/ . Em seguida, use try_files para testar uma série de URIs usando cada prefixo do site.

Por exemplo:

location ~ ^/images/(.*)$ {
    root /path/to/docroot/images;
    try_files /siteA/$1 /siteB/$1 /siteC/$1 =404;
}

Você pode herdar o valor de root do bloco adjacente e, nesse caso, ajustar os parâmetros para try_files apropriadamente.

    
por 11.11.2018 / 16:46