Nginx イメージ ヘッダー キャッシュが更新されない

Nginx イメージ ヘッダー キャッシュが更新されない

画像ファイルがありますhttps://www.example.com/img/bart-had-a-groove.gif

これは私のサイト設定内の唯一のキャッシュ ブロックであり、グローバル 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";
}

これで、ヘッダーが に設定されていることがわかりますCache-Control "public, no-transform, max-age=2628000";が、たとえばイメージを CURL すると次curl -X GET -I https://www.example.com/img/bart-had-a-groove.gifのようになります。

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

Cache-Control: public設定と一致していないことがわかります。no-transform, max-age=2628000部分が欠落しています。

私はsystemctl stop nginx && systemctl start nginx && systemctl reload nginxあらゆる変化を追いかけます。

アップデート 残りのサーバーブロック:

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$" { }
}

答え1

「Cache-Control」ヘッダーに関して、2つの関連する設定ディレクティブを使用しています(下記参照)。ヘッダーを追加「Cache-Control」ヘッダーの「no-transform」ディレクティブを理解しているからです。

有効期限は1Mです。

--> ヘッダー「Cache-Control」と「Expires」を設定します。

ドキュメントを見る:

「Expires」および「Cache-Control」応答ヘッダーの追加または変更を有効または無効にします...

add_header Cache-Control "public、no-transform、max-age=2628000";

--> 「Cache-Control」ヘッダーを手動で設定します。

関連情報