首页 > 解决方案 > Laravel 和 Google 应用引擎 flex 环境。在 nginx 配置中设置缓存控制不起作用

问题描述

我正在构建一个 laravel 应用程序,并且正在尝试启用浏览器缓存。

我试图在位于我的应用程序根目录的自定义 nginx-app.conf 文件中设置 expires/cache-control。(https://cloud.google.com/appengine/docs/flexible/php/reference/app-yaml

nginx-app.conf 的内容:

location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv|svgz?|ttf|ttc|otf|eot|woff|woff2) {
  expires 30d;
  add_header Pragma public;
  add_header Cache-Control "max-age: 2592000,public";
}

但是标题仍然包含来自谷歌的 600 秒的默认缓存控制。

cache-control: max-age=600
cache-control: public
content-encoding: gzip
content-type: text/css
date: Fri, 14 Jun 2019 10:19:07 GMT
etag: W/"5d03719d-6ffe"
expires: Fri, 14 Jun 2019 10:29:07 GMT
last-modified: Fri, 14 Jun 2019 10:06:21 GMT
server: nginx
status: 200
vary: Accept-Encoding
via: 1.1 google

标签: laravelgoogle-app-enginenginxbrowser-cachecache-control

解决方案


我在 GAE flex 上的 Nginx 缓存中遇到了类似的问题,我无法在反向代理上找到修复程序。

我的猜测是你必须等待这些文件过期,然后你会看到新的缓存控制。

从这个角度来看,我发现 GAE 非常有限,例如在 AWS 上没有遇到过这种情况。

应用层的解决方法是

  1. 静态文件的缓存破坏/版本控制(您可以查看Sails.js 的此示例
  2. 向请求添加缓存标头(相同链接,以下评论

另请参阅此答案


推荐阅读