Nginx: el encabezado caduca no funciona

Nginx: el encabezado caduca no funciona

Tengo problemas con el expirescampo del encabezado. Las siguientes reglas de nginx me dan este encabezado (sin encabezado que caduque). ¿Ideas de por qué no se pasan los encabezados de vencimiento?

Encabezado 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

Configuración de 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;
    }
}

Respuesta1

Lo siguiente debería funcionar para mostrar el encabezado de caducidad que se configuró en el mismo bloque de ubicación...

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

Según la wiki de Nginx,archivos_de_pruebadebe terminar con un URI o con un código de estado. Puede obtener más información sobre por qué no se establecen caducidades, si habilitadepuración en Nginx.

Actualizar:

¿Ideas de por qué no se pasan los encabezados de vencimiento?

Habilité la depuración para descubrir esta interesante situación. Esto es lo que encontré...

Aquí hay una cita directa del artículo wiki de try_files vinculado anteriormente...

Si no se encontró ninguno de los archivos, se realiza una redirección interna a la uri especificada en el último parámetro.

Entonces, cuando usaste el siguiente código...

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

el nginx no pudo encontrar $uriy $uri/(en su caso /css/v1/afile.css y /css/v1/afile.css/), se realiza una redirección interna al URI especificado en el último parámetro. Entonces, después de la redirección interna, /$1/$2se encuentra la ubicación (en su caso /css/afile.css),en otro bloque de ubicación. Dado que lo ejecuta otro bloque de ubicación que no tiene vencimientos, no vio vencimientos.

información relacionada