Seu bloco .(js|css|png|jpg|jpeg|gif|ico)
location captura solicitações de recursos carregados que terminam com essas extensões de arquivo. Como o nginx só executa um único bloco de localização em cada nível, seu script PHP não é executado para essas solicitações. O nginx tenta veicular o arquivo diretamente do disco, mas não consegue encontrar o recurso enviado.
Você precisa tornar essa correspondência de blocos de local mais restrita, para que ela não corresponda aos recursos enviados. Por exemplo:
location ~* ^/static/.*\.(js|css|png|jpg|jpeg|gif|ico)$
Editar : quando digo "nível", quero dizer nível de aninhamento. Por exemplo:
location / {
location /foo {}
}
location /bar {}
location /baz {
location /baz/quaz {}
location ~ \.php$ {}
}
Os blocos de localização /
, /bar
e /baz
estão no nível 1. Os blocos de localização /foo
, /baz/quaz
e \.php$
estão no nível 2, porque estão aninhados dentro de um nível 1 bloco de localização. Digamos que a solicitação seja para /baz/quaz/index.php
. O nginx selecionará o bloco de localização de nível 1 mais específico, neste caso /baz
. Nenhum outro bloco de localização de nível 1 será processado, portanto, o bloco /
não terá efeito para essa solicitação. Se houver blocos de localização de nível 2, fará o mesmo, neste caso, escolhendo \.php$
e ignorando /baz/quaz
.