Diretiva de localização não funciona

7

Para meu servidor NGINX, tenho um servidor virtual configurado apenas para distribuir conteúdo estático. No momento, estou tentando configurá-lo para que as imagens tenham uma data de expiração. No entanto, quando eu crio uma diretiva de localização para isso, tudo resulta em um 404.

Minha configuração agora está assim:

/srv/www/static.conf

server {
    listen                          80;
    server_name                     static.*.*;

    location / {
            root                    /srv/www/static;
            deny                    all;
    }

    location /images {
            expires                 1y;
            log_not_found           off;
            root                    /srv/www/static/images;
    }
}

Note que este arquivo está incluído no /etc/nginx/nginx.conf, dentro de uma diretiva http

Estou tentando acessar a imagem, digamos ... static.example.com/images/screenshots/something.png . Com certeza, a imagem também existe em /srv/www/static/images/screenshots/something.png . No entanto, ir para o dito endereço não funciona e simplesmente me diz 404 Not Found .

No entanto, se eu remover location /images e alterar location / para o seguinte ...

location / {
    root /srv/www/static;
}

Funciona! O que estou fazendo errado aqui?

    
por Jesse Brands 16.05.2014 / 22:47

1 resposta

10

Sua configuração está seguindo a configuração nginx armadilhas Você deve leia-o antes de configurar o nginx.

Para responder à sua pergunta, você não deve definir root na localização, defini-la uma vez e a tag de localização permitirá que você atribua automaticamente acesso a diretórios específicos.

Além disso, em vez de definir raiz personalizada para o diretório de imagens, use try_files . O $uri mapeará o diretório /images/ com /static/images/ .

Experimente esta configuração:

server {
    listen                          80;
    server_name                     static.*.*;
    root                            /srv/www;

    location /static/ {
            deny                    all;
    }

    location /images/ {
            expires                 1y;
            log_not_found           off;
            autoindex               off;
            try_files $uri static/images$uri;
    }
}
    
por 16.05.2014 / 22:56