Nginx: Header „Expires“ funktioniert nicht

Nginx: Header „Expires“ funktioniert nicht

Ich habe Probleme mit dem expiresHeader-Feld. Die folgenden Nginx-Regeln geben mir diesen Header (keinen Expired-Header). Ideen, warum die Expired-Header nicht übergeben werden?

Header für: /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

Nginx-Konfiguration:

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;
    }
}

Antwort1

Folgendes sollte funktionieren, um den Expires-Header anzuzeigen, der im selben Standortblock festgelegt wurde …

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

Laut Nginx-Wiki:Versuchen Sie_Dateiensollte mit einer URI oder einem Statuscode enden. Weitere Informationen dazu, warum Ablaufdaten nicht gesetzt sind, erhalten Sie, wenn SieDebuggen in Nginx.

Aktualisieren:

Ideen, warum die Expires-Header nicht übergeben werden?

Ich habe das Debuggen aktiviert, um diese interessante Situation zu verstehen. Das habe ich herausgefunden …

Hier ist ein direktes Zitat aus dem zuvor verlinkten Wiki-Artikel „try_files“ …

Wenn keine der Dateien gefunden wurden, erfolgt eine interne Weiterleitung zur im letzten Parameter angegebenen URI.

Wenn Sie also den folgenden Code verwendet haben ...

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

nginx konnte nicht finden $uriund $uri/(in Ihrem Fall /css/v1/afile.css und /css/v1/afile.css/) wird eine interne Umleitung zur im letzten Parameter angegebenen URI durchgeführt. Nach der internen Umleitung wird also der Speicherort /$1/$2gefunden (in Ihrem Fall /css/afile.css).in einem anderen Standortblock. Da es von einem anderen Standortblock ausgeführt wird, der keine Ablaufdaten hat, haben Sie keine Ablaufdaten gesehen.

verwandte Informationen