IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

记一次因错误的500页面引发的血案

小小子 2015-09-04 21:25:14 累计浏览 1,781 次
本机暂存

讲故事,就得先介绍一下背景:

   业务上线了某活动页面,但是点击至某固定链接时,页面跳转至首页。

   排查过程如下:

  • 确定是否稳定复现,结果:其他未跳转至首页的用户无此现象。而一旦跳转至首页的用户,则访问相关链接永远跳首页。

  • http抓包,发现无此链接的请求,而是直接请求到了首页

  • 怀疑系统缓存,发现缓存内容为:<meta http-equiv=”refresh” content=”0;url=/”>

  • Meta 背景知识:

       http://www.metatags.info/meta_http_equiv_refresh

    最终定位:

       由于跳转的操作在开发环境永远无法复现,怀疑与生产环境有关。最终对比nginx配置如下:

error_page 500 = /50x.html;

   而生产环境存在50x.html,其内容:

<meta http-equiv="refresh" content="0;url=/">

   在系统上线时,会进行文件替换及产生新的autoload文件。此时的访问可能会由于文件内容不完全等原因,会产生500错误。so~

结论:

   系统可以在500错误时给出相关提示引导。但是上述直接跳转至首页会导致缓存,因此一旦跳转一次后续再访问会直接读取缓存再次跳转。

   解决方法:

  • 在50x.html页面,增加禁止缓存操作,参考:http://www.metatags.info/meta_http_equiv_cache_control

  • 给一个更友好的500错误提示页面,参考:

  • 同分类推荐文章

    1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
    2. Go 实验特性详解 (2026-06-21 10:05:27)
    3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

    查看更多 后端 文章 →

    建议继续学习

    1. 404~遇见你是最美丽的错误 (累计阅读 9,350)
    2. 豆瓣的Url结构方式一览 (累计阅读 7,938)
    3. nginx自定义模块编写-根据post参数路由到不同服务器 (累计阅读 7,352)
    4. 2012年数据库技术大会 百度和淘宝介绍的中间件对比 (累计阅读 3,999)
    5. Perl 异常处理之 autodie 和 Try::Tiny (累计阅读 3,713)
    6. 深入理解 GRE tunnel (累计阅读 3,530)
    7. PHP错误处理及异常处理 (累计阅读 3,500)
    8. 规则引擎简介 (累计阅读 3,478)
    9. 登录时密码错误了该怎么提示? (累计阅读 3,279)
    10. Debugging JavaScript:throw与console (累计阅读 3,257)