如何配置Nginx提供带MD5哈希的index.html文件?
解决Nginx匹配带MD5哈希的index.html文件问题
嘿,这个需求我刚好处理过,其实借助Nginx的正则匹配能力,结合try_files或者rewrite规则就能轻松搞定。下面给你两种适配不同场景的配置方案,直接加到你的server块里就行:
方案一:用try_files快速匹配(推荐)
这种方法最简洁,适合大部分场景,尤其是你只需要根路径或其他路由指向带哈希的index文件时:
server { listen 80 default deferred; server_name myapp.com; access_log /var/log/nginx/access.log; root /home/test; # 记得补全你的完整根目录路径 # 处理根路径访问,精准匹配带哈希的index文件 location = / { # 这里的{7}对应你示例里的7位哈希,如果你用完整32位MD5,改成{32} try_files $uri /index-[0-9a-f]{7}.html =404; } # 如果你是单页应用,需要所有路由都 fallback 到这个index文件,就加这个规则 location / { try_files $uri $uri/ /index-[0-9a-f]{7}.html =404; } }
关键说明:
[0-9a-f]{7}是正则表达式,用来匹配7位十六进制的哈希字符(对应你示例里的13e5cb2),如果你的MD5哈希是完整32位,直接把{7}改成{32}就行。try_files的逻辑是:先尝试访问当前请求的URI,如果找不到,就去匹配后面的带哈希的index文件,最后如果都找不到返回404。
方案二:用rewrite规则实现重定向
如果需要更灵活的路由控制,可以用rewrite规则:
server { listen 80 default deferred; server_name myapp.com; access_log /var/log/nginx/access.log; root /home/test; # 根路径直接重写到带哈希的index文件 location = / { rewrite ^ /index-[0-9a-f]{7}.html break; } # 单页应用路由 fallback:先尝试静态文件,找不到就重写到index文件 location / { try_files $uri $uri/ @rewrite_to_index; } # 命名location,专门处理路由重写 location @rewrite_to_index { rewrite ^ /index-[0-9a-f]{7}.html break; } }
额外注意事项:
- 部署时建议清理旧的带哈希的index文件,避免目录里存在多个符合规则的文件(Nginx会按字母顺序匹配第一个,可能导致访问到旧版本)。
- 修改完配置后,一定要用
nginx -t检查语法是否正确,没问题再执行systemctl reload nginx(或对应系统的重启命令)让配置生效。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

