现象

访问某个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

由Nginx的DNS缓存导致的访问404的更多相关文章

  1. 解决vuejs应用在nginx非根目录下部署时访问404的问题

    以往部署vuejs应用都是直接在nginx的location为/下直接部署,这次遇到要将vue应用部署在/vuejs-admin的非根下,使用以往部署方案直接访问就会404,这时修改步骤如下: 1.修 ...

  2. 清理工具CleanMyMac如何帮助用户清空DNS缓存

    什么是DNS缓存?这个缓存有什么危害?相信大家平时使用浏览器时,有时候会遇到一个很奇怪的问题,就是Mac打开许多网站如百度网站,都是可以访问的,但是在打开某个特定网站时,却发现浏览器提示检测不到网络连 ...

  3. Chrome清除dns缓存

    Chrome清除dns缓存 为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度.你在谷歌Chrome浏览器的地址栏中输入about: ...

  4. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  5. 一次dns缓存引发的惨案

    时间2015年的某个周六凌晨5点,公司官方的QQ群有用户反馈官网打不开了,但有的用户反馈可以打开,客服爬起来自己用电脑试了一下没有问题,就给客户反馈说,可能是自己网络的问题,请过会在试试.早点8点,越 ...

  6. Nginx - 代理、缓存

    Nginx 标签 : nginx 代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送 ...

  7. 清理dns缓存

    dns缓存是什么? DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来.并且它会为缓存设定一个失效时间 (例如N小时),在这N小时之内,当你再次访问这个网站时,系统就会直接从你电脑 ...

  8. 某些浏览器具有dns缓存功能,大家更改域名指向,建议清理下浏览器缓存

    最近遇到一个很郁闷的问题,在我们的的ngnix服务器上原来默认的网址需要更改.更改后,重启了ngnix.可是在客户端使用360浏览器打开网址.地址还是指向旧地址.直接输入服务器 IP地址转向了新地址, ...

  9. dns缓存刷新时间是多久?dns本地缓存时间介绍

    原文: http://www.winwin7.com/JC/4742.html dns缓存刷新时间是多久?一般来说,我们只知道DNS解析是互联网绝大多数应用的实际寻址方式,在我们打开某站点,DNS返回 ...

随机推荐

  1. redux+saga+reducer

    saga.js这个文件里面的函数实际没有在其他jsx中引用吧?这个文件的作用就是把异步数据拿到,放进reducer,如果jsx想取,需要结合connect来取数据.

  2. yum程序下载被占用

    Loaded plugins: fastestmirror, refresh-packagekit, security Existing lock /var/run/yum.pid: another ...

  3. 【C语言编程练习】5.9 爱因斯坦的阶梯问题

    1. 题目要求 有一个长阶梯,每2步上,最后剩1个台阶,若每3步上,最后剩2个台阶.若每5步上,最后剩4个台阶,若每6步上,最后剩5个台阶.只有每步上7阶,才可以刚好走完,请问台阶至少有多少阶? 2. ...

  4. Exp4 恶意代码分析 20164302 王一帆

    1.实践目标 1.1监控自己系统的运行状态,看有没有可疑的程序在运行. 1.2分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systra ...

  5. lua 语言基础

    1.数据类型: string(字符串) ·运算符“+.-.*./”等操作字符串,lua会尝试讲字符串转换为数字后操作: ·字符串连接用“..”运算符 ·用“#”来计算字符串的长度(放在字符串前面) · ...

  6. Hbase 技术细节笔记(下)

      原文地址:https://cloud.tencent.com/developer/article/1006044 四.RegionServer的故障恢复 我们知道,RegionServer的相关信 ...

  7. 关于css盒子模型和BFC的理解

    CSS盒子模型 包含元素内容(content).内边距(padding).边框(border).外边距(margin) 一般元素总宽度 = element的width+padding的左右边距+mar ...

  8. SSM框架mapper.xml模糊查询语句

    SSM框架mapper.xml模糊查询语句 在用SSM框架时,如果想要实现模糊查询,可以在mapper.xml文件中进行数据库语句的书写,方法有很多种,在这里我选择了两种介绍: 方法1: <se ...

  9. 快速幂 ,快速幂优化,矩形快速幂(java)

    快速幂形式 public static int f(int a,int b,int c){ int ans =1; int base=a; while(b!=0){ if((b&1)!=0) ...

  10. Java_重载与重写

    在java中,重载与重写都是多态的体现.重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态. 重载(Overload): 定义:在一个类中,同名的方法如果有不同的参 ...