Diretiva de localização não está funcionando

10

Para o meu servidor NGINX, tenho um servidor virtual configurado apenas para distribuir o conteúdo estático. No momento, estou tentando configurá-lo para que as imagens tenham um prazo de validade. 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;
    }
}

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

Estou tentando acessar a imagem, em, vamos dizer ... 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 esse endereço não funciona e simplesmente me diz 404 Não encontrado .

No entanto, se eu remover location /imagese mudar location /para o seguinte ...

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

Funciona! O que eu estou fazendo errado aqui?

Jesse Brands
fonte

Respostas:

14

Sua configuração está seguindo as armadilhas da configuração do nginx Você deve lê-lo antes de configurar o nginx.

Para responder sua pergunta, você não deve definir rootem local, defina-o uma vez e a tag de local permitirá automaticamente atribuir acesso a diretórios específicos.

Além disso, em vez de definir o diretório raiz personalizado para imagens, use try_files. O $uriirá mapear /images/diretório 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;
    }
}
phoops
fonte
Obrigado! Eu li as armadilhas, mas acho que minha memória me falhou. Isso funciona, embora eu o editei um pouco para meus propósitos.
Jesse Brands
Sim, eu re-ler partes dele de vez em quando eu mesmo, há uma razão que tem uma página wiki separada para ele;)
phoops
Se definir rootdentro locationé uma prática inadequada , como é que eles mesmos estão usando docs / http / ngx_http_core_module.html # alias ? (ver onde ele diz que " é melhor usar a diretiva raiz em vez ") CORREÇÃO : bem, parece que o que está errado é a definição da raiz primária em um local, não apenas qualquer raiz
aexl