Nginx: expira o cabeçalho não funciona

2

Estou tendo problemas com o campo de cabeçalho expires . As seguintes regras nginx me dão esse cabeçalho (nenhum cabeçalho de expiração). Ideias por que os cabeçalhos vencidos não estão sendo passados?

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 do 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;
    }
}
    
por iDev247 14.09.2013 / 09:36

1 resposta

5

O seguinte deve funcionar para exibir o cabeçalho de expiração que foi definido no mesmo bloco de localização ...

try_files $uri $uri/ /$1/$2 =404;

De acordo com o wiki do Nginx, try_files deve terminar com um URI ou com um código de status. Você pode obter mais informações sobre o motivo pelo qual as expirações não estão definidas, se você habilitar a depuração de no Nginx .

Atualizar :

Ideas why the expires headers arn't being passed?

Eu habilitei a depuração para descobrir essa situação interessante. Isso é o que eu encontrei ...

Aqui está uma citação direta do artigo wiki try_files vinculado anteriormente ...

If none of the files were found, an internal redirect to the uri specified in the last parameter is made.

Então, quando você usou o seguinte código ...

try_files $uri $uri/ /$1/$2;

o nginx não encontrou $uri e $uri/ (no seu caso /css/v1/afile.css e /css/v1/afile.css/), um redirecionamento interno para o URI especificado no último parâmetro é feito. Então, após o redirecionamento interno, a localização /$1/$2 é encontrada (no seu caso /css/afile.css), em outro bloco de localização . Desde então, ele é executado por outro bloco de localização que não tem nenhuma expiração, você não viu expirar.

    
por 14.09.2013 / 10:45

Tags