nginx: vários blocos de localização correspondentes

2

Tento definir a diretiva de cabeçalho max-age e o "anexo" Content-Disposition da seguinte forma:

location / {

    # set up max-age header directive for certain file types for proper caching
    location ~* \.(?:css|js|ico|gif|jpe?g|png|mp3|mpeg|wav|x-ms-wmv|eot|svg|ttf|woff|woff2)$ {
        expires 7d;
        add_header Cache-Control "public";
    }

    # force download for ceratain file types
    location ~* \.(?:fb2|mobi|mp3)$ {
         add_header Content-Disposition "attachment";
    }
...
}

O problema está nos arquivos .mp3 que correspondem aos dois blocos de localização. Apenas o primeiro é usado (max-age). Como posso ter o .mp3 com ambos - max-age e Content-Disposition "attachment"?

    
por user1876484 13.06.2017 / 22:43

2 respostas

2

Há um bom artigo sobre o bloco de localização e servidor correspondente aqui . Apenas um bloco de localização pode corresponder, então você criará um bloco de localização apenas para arquivos mp3.

 location ~*  \.mp3$ {
   expires 7d;
   add_header Cache-Control "public";
   add_header Content-Disposition "attachment";
}

O Nginx irá coincidir com o primeiro bloco de localização com o mesmo prefixo, por isso precisa ir antes dos dois blocos existentes, ou você precisa remover o mp3 dos critérios de correspondência para os outros dois blocos.

    
por 13.06.2017 / 22:49
0

Considerando que apenas o primeiro local é usado, por que não fazer isso?:

location / {

    # set up max-age header directive for certain file types for proper caching
    location ~* \.(?:css|js|ico|gif|jpe?g|png|mpeg|wav|x-ms-wmv|eot|svg|ttf|woff|woff2)$ {
        expires 7d;
        add_header Cache-Control "public";
    }

    # force download for ceratain file types
    location ~* \.(?:fb2|mobi)$ {
         add_header Content-Disposition "attachment";
    }

    # For mp3 files set both:
    location ~* \.mp3$ {
        expires 7d;
        add_header Cache-Control "public";
        add_header Content-Disposition "attachment";
    }

...
}
    
por 13.06.2017 / 23:30