Redirecionamento interno no nginx se o arquivo não existir

2

Eu quero que todos os URLs sob / media / thumbnails sejam exibidos a partir do disco e, se o arquivo não existir, de outro servidor, mas sem redirecionar o cliente. Eu acreditava que isso deveria funcionar, mas não consigo encontrar o que está errado:

    location /media/thumbnails {
            try_files $uri @thumbnail_generator;
    }

    location /media {
            root /home/plinio/nginx_test;
            break;
    }

    location @thumbnail_generator {
            proxy_pass http://127.0.0.1:8081/media_generate$uri;
    }

Mesmo depois de criar o arquivo /home/plinio/nginx_test/media/thumbnails/test.txt, uma solicitação para /media/thumbnails/test.txt ainda está sendo redirecionada internamente para @thumbnail_generator.

    
por Plinio 02.05.2012 / 23:29

1 resposta

1

Você não nos mostrou sua configuração completa de vhost, por isso não posso dizer com certeza, mas seu uso da diretiva root no bloco /media location sugere que você pode não ter uma diretiva root na configuração do vhost de nível superior.

Nginx location blocos não são cumulativos; ele encontra o melhor combinação única location block (de acordo com as regras especificadas na documentação) e usa isso. Portanto, se você não tiver uma na própria configuração do vhost, suas pesquisas de /media/thumbnails/text.txt não irão para onde você acha que estão no sistema de arquivos e, portanto, o arquivo não existe e o redirecionamento interno entra em ação.

A propósito, você pode encontrar esses tipos de problemas trivialmente ativando o log de depuração e observando o log de erros do vhost. O Nginx é muito bom em registrar o que está fazendo para processar um pedido, e o caminho do arquivo completamente errado é geralmente uma grande pista do que você fez de errado.

    
por 03.05.2012 / 00:21

Tags