
Para meu servidor NGINX, tenho um servidor virtual configurado apenas para distribuir conteúdo estático. No momento estou tentando configurar para que as imagens tenham prazo de validade. No entanto, quando eu crio uma diretiva de localização para isso, tudo resulta em 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, 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 esse endereço não funciona e simplesmente me diz404 não encontrado.
No entanto, se eu remover location /images
e mudar location /
para o seguinte ...
location / {
root /srv/www/static;
}
Funciona! O que estou fazendo de errado aqui?
Responder1
Sua configuração está seguindo a configuração do nginxarmadilhasVocê deve lê-lo antes de configurar o nginx.
Para responder à sua pergunta, você não deve definir root
o local, defina-o uma vez e a tag de localização permitirá automaticamente atribuir 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 diretório $uri
mapeará /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;
}
}