zoukankan      html  css  js  c++  java
  • 由Nginx的DNS缓存导致的访问404

     

     

    现象

    访问某个URL出现404,而且全站都是404。通过日志查看Nginx的规则也正确,请求被代理到指定位置。

    排查

    最近针对这个站点没有修改过Nginx配置也没有站点升级。所以应该是其他原因。
    首先PING代理到的域名,发现可以解析

    查看日志

    发现解析的2个地址都返回502,这里[ip,ip]是因为第一个访问失败才走的第二个,最后2个都失败了,后端返回502,然后Nginx给前端重定向到自定义的404页面。
    仔细一观察发现PING解析的IP和Nginx日志解析的IP不同。因为我们这里代理是通过域名,所以后端IP不可控,怀疑是Nginx缓存了DNS解析,后端变化而Nginx没有更新所导致,顾首先重启一下Nginx服务。

    重新访问并查看日志

    总结

    这种问题通常发生在Nginx代理使用代理到域名的情况下发生,尤其是代理到一个第三方的地方,它的域名解析出来的IP可能会更换(出于安全考虑),而Nginx本身有DNS缓存机制,默认你可以不配置,这样它缓存DNS解析的时长就是它通过查询DNS服务器获得记录的TTL时间。

    DNS缓存时长

    DNS缓存有操作系统级别也有应用程序级别,OS级别都有生存时间,时间到了就会刷新缓存(有时候根据需要我们也会强刷)。所以你有时候需要配置。默认情况下Nginx的resolver 没有配置,也没有设置valid时间,那么Nginx缓存这条解析的时长就是它首次查询DNS时从DNS服务器响应中获得的,得到之后这段时间就不会再查询,当过期之后它再查询得到结果再缓存,所以如果一条DNS记录解析在Nginx缓存这个周期内变更,虽然你在系统上PING看到的新的IP,但是Nginx由于缓存时长没有过期所以它还会用老的IP。

    比如在应用程序级别:以谷歌浏览器为例,它有一个DNS缓存机制为例加快连接速度。

    chrome://net-internals/#dns

  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/rexcheny/p/9381879.html
Copyright © 2011-2022 走看看