
Ich habe Probleme mit dem expires
Header-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 $uri
und $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/$2
gefunden (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.