[eggjs/egg]线上egg-static默认maxAge无论在项目的config目录下的config.prod.js和config.default.js中设置均不生效

2024-06-28 155 views
8

线上系统为centos7.2 本地开发为windows10; 本地开发在config.prod.js设置maxage后通过npm start启动项目后maxage正常得到修改; 而在线上在config.prod.js设置 停掉在npm start启动仍然是一年,静态资源这些没有使用egg-view-assets 这个 小项目 想着怎么简单怎么来 奇怪的是在线上无论如何设置都不生效

回答

5

就很奇怪 当我在新建了一个文件后 或者 别的操作后 修改的maxage又生效了 我发现他不在是一年 而是设置的30天............ 之前重启了无数遍都没有生效

8

测试浏览器:火狐浏览器 控制台开启禁用缓存 config.defgault.js egg-static配置: config.static = { prefix: '/', dir: path.join(appInfo.baseDir, 'app/public'), maxAge: 2100000, };

config.prod.js : config.static = { prefix: '/', dir: path.join(appInfo.baseDir, 'app/public'), maxAge: 1036800, }; 此配置在windows下通过npm start启动 在f12可以看到响应头: cache-control | public, max-age=1036800 通过npm run dev启动可以看到响应头: cache-control | public, max-age=2100000 也就是或在windows环境下设置的是百分百正常生效的

但是同样的代码放到CentOs7.2的服务器端npm start运行后 响应头仍然为一年, 因为只是涉及了一个静态文件需要更改,所以不得已而为之我将这个文件名由index.html 改为index_new.html 后 , 想要曲线救国,便在nginx添加了 location =/index.html{ proxy_pass https://www.hosts.com/index_new.html; } 后,我确实曲线救国成功了,但是我惊奇的发现,所有的静态文件(是所以的静态文件)

的max-age变更为了我所设置的1036800,当我再次尝试修改任意一个静态文件的内容以及重新修改了max-age后 通过重启项目后我发现 npm start启动后max-age仍然不是我最新设置的 也就是说我也不知道在什么情况下触发了他更新max-age

9

跟什么操作系统啥都的没关系。

也不要用浏览器去测试,直接 curl。

还是没看懂你的更新是啥意思,如果已经写入到用户端了,肯定是不会更新的了,因为 mageAge 一年了,它只会在一年后再重新发起,这是 HTTP 协议的规定。

4

如果怀疑 config 没生效,可以检测机器上的 run/application.json 和 run/application_meta.json 文件看看 static 配置是否正确覆盖了,具体看下 FAQ 文档。

8

是的 我看了这个 run/application.json run/application_meta.json 本地电脑上的是设置的maxage 而服务器上的仍然是一年 因为我测试火狐浏览器控制台开启禁用缓存(就相当于ctrl+f5)所以不存在说是写到用户端了 curl也是一年 但是奇怪的就是 我来来回回重启了很多次 都不生效 但有一次他生效了 就是我上边说的 我在public下新建了个index_new.html文件后 重启生效了 我想复现,再次尝试创建了一个新的文件但是又没有生效新的 可是我本地电脑直接就会生效 代码是一模一样的代码....

2

直接提供可复现的最小代码库看吧,空对空聊没啥意义。然后再描述清楚整个操作步骤和非预期的是什么,还是没看懂你具体问题在哪。

9

发现有同样问题,在本地win10下maxage能正常设置,但在Ubuntu下还是一年

0

需要一个可复现的例子