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.