nginx 开启 gzip_static 指令的后续问题:不能删除源文件,即使存在 .gz 文件也报错

Laravel
如截图所示,有185个按需加载的文件(0.js~184.js)另外还有对应的185个压缩文件(0.js.gz~184.js.gz)。已开启 Nginx 的 gzip_static 指令,当浏览器访问 xx.js 文件的时候,nginx会自动返回对应的 xx.js.gz 文件,之后浏览器自动解压拿到最终文件。到这里一切都正常。

要求:删除这 185 个 .js 文件,在服务器里只保留 185 个 .gz 文件,并保证网页可以正常访问。

问题:这将导致404错误。假设删除了 /js/app.js 文件,当浏览器访问 /js/app.js 文件的时候服务器直接回复文件不存在(并没有把原本存在的 /js/app.js.gz 文件返回给浏览器)。其它文件存在同样的问题。

求教,该如何配置 nginx 才能满足要求呢?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

file
按照nginx文档的说法( https://nginx.org/en/docs/http/ngx_http_gu... ),不仅仅可以删除 .js 文件,服务器还会根据浏览器是否支持自动解压的功能正确的发送压缩包或者解压后发过去(必须安装 ngx_http_gunzip_module 这个模块)。

换句话说:这185个.js文件可以删除,如果用户是老旧的浏览器(不会自动解压),那么nginx会使用 gunzip 模块对 gz 文件解压,然后发送 .js 文件给老浏览器。
如果浏览器支持自动解压功能,那么nginx直接发送 .gz 文件(不用解压了),浏览器会自动解压的。

我摸索了好几天,搞不成……

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!