Quando nginx escolhe um location para processar uma solicitação, ele pode escolher o bloco location interno ou externo. Não combina as declarações de ambos.
O rewrite não é herdado pelo aninhado location . Se você quiser que o rewrite se aplique a todos os locais, coloque-o no escopo do bloco server .
A expressão regular da sua declaração rewrite é suficientemente específica, e pode ser movida como está.
Por exemplo:
rewrite "^/static[0-9]{10}/(.*)$" /static/$1 last;
location /static {
location ~* \.pdf$ {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
...
}
Claro, pode ser mais eficiente apenas repetir a instrução rewrite nos dois blocos location .
Uma abordagem alternativa é evitar o rewrite e usar uma expressão regular location para remover o token de cache, usando uma diretiva alias . Consulte este documento para saber mais.
Por exemplo:
location ~ "^(?<prefix>/static)[0-9]{10}(?<suffix>/.*)$" {
alias /path/to/root$prefix$suffix;
location ~* \.pdf$ {
add_header Access-Control-Allow-Origin *;
add_header Content-Disposition 'inline';
}
...
}
Observe que a expressão regular location block tem uma ordem de avaliação diferente para prefixar location blocks. Consulte este documento para obter detalhes.