
Estou tendo problemas com o expires
campo de cabeçalho. As seguintes regras do nginx me fornecem esse cabeçalho (sem cabeçalho de expiração). Idéias de por que os cabeçalhos expirados não estão sendo aprovados?
Cabeçalho para: /css/v1/afile.css
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 14 Sep 2013 07:29:59 GMT
Content-Type: text/css
Content-Length: 12548
Last-Modified: Sat, 11 May 2013 11:05:51 GMT
Connection: keep-alive
Accept-Ranges: bytes
Configuração Nginx:
server {
listen 80 default_server;
server_name _;
root /var/www/apps/myapp/public/app/webroot;
index index.php index.html index.htm;
server_tokens off;
access_log /var/www/apps/myapp/logs/access.log;
error_log /var/www/apps/myapp/logs/error.log;
client_max_body_size 20M;
rewrite_log on;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ /(js|css)/v[0-9]+/(.*) {
access_log off;
expires 7d;
add_header Cache-Control public;
try_files $uri $uri/ /$1/$2;
}
# Pass the PHP scripts to FastCGI server
location ~ \.php$ {
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_intercept_errors on; # to support 404s for PHP files not found
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Responder1
O seguinte deve funcionar para exibir o cabeçalho expira que foi definido no mesmo bloco de localização...
try_files $uri $uri/ /$1/$2 =404;
De acordo com o wiki Nginx,try_filesdeve terminar com um URI ou com um código de status. Você pode obter mais informações sobre por que as expirações não estão definidas, se você ativardepuração em Nginx.
Atualizar:
Idéias de por que os cabeçalhos expirados não estão sendo aprovados?
Ativei a depuração para descobrir esta situação interessante. Isto é o que eu encontrei...
Aqui está uma citação direta do artigo wiki try_files vinculado anteriormente ...
Se nenhum dos arquivos for encontrado, é feito um redirecionamento interno para o uri especificado no último parâmetro.
Então, quando você usou o seguinte código ...
try_files $uri $uri/ /$1/$2;
o nginx não conseguiu encontrar $uri
e $uri/
(no seu caso /css/v1/afile.css e /css/v1/afile.css/), é feito um redirecionamento interno para o URI especificado no último parâmetro. Assim, após o redirecionamento interno, o local /$1/$2
é encontrado (no seu caso /css/afile.css),em outro bloco de localização. Como ele é executado por outro bloco de localização que não possui expirações, você não viu expirações.