如何在Nginx中配置至带哈希文件名的文件的重定向?
解决Single-spa动态哈希文件的Nginx 302重定向问题
方案一:部署时创建符号链接(推荐)
这种方式通过部署脚本配合Nginx配置,精准指向最新的带哈希文件,避免正则匹配的不确定性:
部署脚本调整:每次构建微前端后,生成带哈希的文件(如
app.123abc.js),同时在dist目录下创建一个符号链接app.js,指向最新的带哈希文件。例如在shell脚本中添加:# 删除旧的符号链接(如果存在) rm -f dist/app.js # 创建新的符号链接,指向最新的带哈希文件(假设当前目录下只有一个带哈希的app文件) ln -s $(ls -t dist/app.*.js | head -n1) dist/app.jsNginx配置:在你的server块中添加如下location规则,将无哈希的请求重定向到符号链接指向的实际带哈希文件:
location = /dist/app.js { # 获取符号链接指向的实际文件名,并重定向 rewrite ^/dist/app\.js$ /dist/$(basename $realpath_root$uri) permanent; }$realpath_root$uri会解析符号链接的真实文件路径basename提取出带哈希的文件名(如app.123abc.js)permanent返回301永久重定向(若需临时重定向,替换为redirect即可返回302)
方案二:纯Nginx正则匹配(无需修改部署脚本)
如果无法调整部署脚本,可以利用Nginx的正则匹配和文件存在性检查,自动匹配带哈希的文件:
在server块中添加如下配置:
location = /dist/app.js { # 如果请求的无哈希文件不存在,尝试匹配带哈希的版本 if (!-f $request_filename) { # 正则匹配带哈希的文件格式(假设哈希由数字和小写字母组成) rewrite ^/dist/app\.js$ /dist/app\.[0-9a-f]+\.js? permanent; } }
注意:这种方式依赖部署时
dist目录下仅保留最新的带哈希文件,如果存在多个同前缀的带哈希文件,Nginx会匹配正则表达式命中的第一个文件,可能不是最新版本。
验证配置
配置完成后,重启Nginx使配置生效:
nginx -s reload
访问http://your-domain/dist/app.js,应该会被重定向到对应的dist/app.123abc.js。
内容的提问来源于stack exchange,提问作者Homo Civicus
相关产品推荐
相关产品推荐

