
Ich habe eine Bilddatei beihttps://www.example.com/img/bart-had-a-groove.gif
Und dies ist der einzige Cache-Block in meiner Site-Konfiguration, es gibt keine Caching-Einstellungen in der globalen Datei nginx.conf.
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
access_log off;
add_header Cache-Control "public, no-transform, max-age=2628000";
}
Sie können sehen, dass meine Kopfzeile auf eingestellt ist Cache-Control "public, no-transform, max-age=2628000";
. Wenn Sie das Bild jedoch beispielsweise mit CURL bearbeiten, curl -X GET -I https://www.example.com/img/bart-had-a-groove.gif
erhalten Sie:
HTTP/1.1 200 OK
Content-Type: image/gif
Connection: keep-alive
Server: nginx/1.13.9
Content-Length: 771510
Last-Modified: Fri, 17 Feb 2017 17:26:23 GMT
ETag: "58a7323f-bc5b6"
Pragma: public
Cache-Control: public
Accept-Ranges: bytes
Date: Mon, 19 Mar 2018 21:49:33 GMT
Expires: Wed, 18 Apr 2018 21:49:33 GMT
Sie sehen, dass das nicht mit der Konfiguration übereinstimmt. Das Teil Cache-Control: public
fehlt .no-transform, max-age=2628000
Ich renne systemctl stop nginx && systemctl start nginx && systemctl reload nginx
jeder Veränderung hinterher.
Aktualisieren Der Rest des Serverblocks:
server {
listen 80;
listen 443;
server_name example.com;
return 301 https://www.$server_name$request_uri;
}
server {
listen 80;
listen 443 ssl http2;
root /var/www/example.com/htdocs/;
index index.html index.htm;
server_name www.example.com;
location / {
autoindex on;
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
# Security note: If you're running a version of PHP older than the
# latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.
# See http://serverfault.com/q/627903/94922 for details.
include fastcgi_params;
# Block httpoxy attacks. See https://httpoxy.org/.
fastcgi_param HTTP_PROXY "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
# PHP 5 socket location.
#fastcgi_pass unix:/var/run/php5-fpm.sock;
# PHP 7 socket location.
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
#expires 1M;
access_log off;
add_header Cache-Control "public, no-transform, max-age=2628000";
}
pagespeed on;
# Needs to exist and be writable by nginx. Use tmpfs for best performance.
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
}
Antwort1
Sie verwenden zwei korrelierende Konfigurationsanweisungen, die den Header "Cache-Control" betreffen (siehe unten). Ich empfehle, nurKopfzeile hinzufügenda Sie die „no-transform“-Direktive des „Cache-Control“-Headers zu schätzen wissen.
läuft in 1M ab;
--> Setzt die Header „Cache-Control“ und „Expires“.
Aktiviert oder deaktiviert das Hinzufügen oder Ändern der Antwortheader „Expires“ und „Cache-Control“ ...
add_header Cache-Control "öffentlich, keine Transformation, max. Alter=2628000";
--> Setzt den Header „Cache-Control“ manuell.