起因是突然发现网站的侧边栏导航有一项失效了,遂打开F12观察(忘记截图了),大概就是浏览器试图下载一个js文件,但是ChunkLoadError了,因为Unexpected token '<',为什么呢?

605dbf751e3ebLuf.gif 因为浏览器上这个js文件不存在,所以Nginx 404回退了,返回了index.html,而index.html开头就是<!DOCTYPE html>,而浏览器把它当作js来解析就发生语法错误Unexpected token '<'了,嗯,这是个经典的前端缓存问题,尝试刷新,Ctrl+F5强制刷新,问题依旧!

观察nginx.conf,强制禁止缓存index.html试试:

        # 禁止缓存 index.html
        location = /index.html {
            root   /usr/share/nginx/html/dist;
            add_header Cache-Control "no-cache, no-store, must-revalidate";
            add_header Pragma "no-cache";
            add_header Expires "0";
        }

重启Nginxdocker restart nginx-web,再次尝试,问题依旧!

OIP-TjGL.A2w6jSA363dHxaBjyk3lOAAAAA

我倒要看看这个js文件存不存在:

docker exec -it nginx-web ls /usr/share/nginx/html/dist/static/js/

结果是显然存在,再看看index.html引用的是不是真的是这个js文件:

docker exec -it nginx-web cat /usr/share/nginx/html/dist/index.html

它引用的也没错啊,难道是权限问题?修改下权限试试:

docker exec -it nginx-web chmod -R 755 /usr/share/nginx/html/dist

再次Ctrl+F5刷新浏览器,问题依旧!

看看Nginx有没有报错先:

docker exec -it nginx-web tail -n 50 /var/log/nginx/error.log

没有报错,最新的一条日志停留在昨天,情况变得有趣了,Nginx“成功”执行了try_files的回退,也就是它认为那个js文件不存在,于是返回了index.html。那么为什么文件明明就在那,Nginx却看不到?

试试手动模拟一下Nginx读取这个js文件:

docker exec -it --user 101 nginx-web cat /usr/share/nginx/html/dist/static/js/chunk-2a07b274.d998b004.js > /dev/null && echo "Nginx用户可读" || echo "Nginx用户不可读"

发现能读到啊,再试试直接在容器里请求一下这个js文件:

docker exec -it nginx-web curl -I http://127.0.0.1/static/js/chunk-2a07b274.d998b004.js

输出:

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.22.1
Date: Fri, 21 Nov 2025 02:22:52 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://exmple-domain.com/static/js/chunk-2a07b274.d998b004.js

一切正常,难道问题出在HTTPS的处理上?再试试用HTTPS请求一下这个js文件试试:

docker exec -it nginx-web curl -k -I https://127.0.0.1/static/js/chunk-2a07b274.d998b004.js

输出:

HTTP/1.1 200 OK
Server: nginx/1.22.1
Date: Fri, 21 Nov 2025 02:25:29 GMT
Content-Type: application/javascript
Content-Length: 45222
Last-Modified: Wed, 19 Nov 2025 09:13:21 GMT
Connection: keep-alive
ETag: "691d8a31-b0a6"
Accept-Ranges: bytes

还是一切正常!

R-Indd.ccf48f2d507727366d0c69b096a0bda4

怎么回事,服务器好像一切正常啊?就在这时,我突然想起来试试浏览器的无痕模式。

结果······好了!!!绕了一大圈,还是浏览器缓存问题。

R-C-UAUj.c23779f5f99c0ba9b0647cc50eaa93fe

文章作者: Liccsu
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Liccsu's blog
喜欢就支持一下吧
打赏
微信 微信