测试环境:
Google Chrome v109 x64
Windows 7 sp1 x64
Nginx v1.22.1 / Alist v3.35.0
未使用 CDN
Ubuntu v22.04.2 LTS
希捷 x18 银河 16T 氦气盘
一开始使用生成空数据的稀疏文件(sparse file) 10G 大小
dd if=/dev/zero of=10G.zip bs=1M seek=10000 count=0
结果浏览器下载直接以本地机械硬盘的最大读写速度进行,检查网络流量,为 0,一看就是使用本地缓存或者直接生成,没有经过网络传输,浏览器直接填充这些空白数据
优化下代码,随机填充了一些数据进去,模拟伪装成完整二进制文件
dd if=/dev/zero of=10G.zip bs=1M seek=10000 count=0
fallocate -l 10G 10G.bin
结果还是被谷歌浏览器给优化了,速度 120-350 mb/s 之间波动
尝试防止缓存,增加 header
add_header Content-Disposition 'attachment; filename="10G.bin"';
add_header Cache-Control 'no-store';
add_header Pragma 'no-cache';
更换生成方式
truncate -s 10G 10G.zip
fallocate -l 10G 10G.zip
重启 nginx ,使用谷歌浏览器无痕模式访问
结果依旧,此时我觉得太诡异了
想起 nginx 还有个模块 chunked_transfer_encoding
,可以模拟文件的下载,而不是直接传输完整文件,或许能绕过这个诡异的优化机制?
添加到了相关 location 段
chunked_transfer_encoding on;
重启 nginx + 浏览器无痕模式结果不变,依然以本地机械硬盘的最大读写速度下载 , 120 -250 MiB/s
人傻了,好这么玩是吧?
套了层娃,使用 Alist 作为后端,由 Nginx 反向代理转发请求给后端,企图玄学
狠狠的被打脸,还是本地生成数据的速度,尝试检查,删除 10G.zip,nginx 返回 404,Alist 也是返回 404,好像没办法了
最后只好含泪舍弃 10G 空间
dd if=/dev/urandom of=/var/nginx/html/temp/10G.zip bs=1M count=10000
再次下载才恢复正常,通过网络传输了
在线等,急,什么情况的神优化?