关于localhost访问特别快而nginx配置代理后转发特别慢的解决

关于localhost访问特别快而nginx配置代理后转发特别慢的解决

    • 背景
    • 解决过程
    • 后续

背景

本地启动一个web应用,在采用localhost:port的方式访问的时候特别流畅,因为访问其它资源涉及到跨域问题所以采用nginx配置代理,结果采用nginx代理后网页有几个但不是全部的静态资源加载特别慢,最终可能会引发504网关超时的问题。

解决过程

定位肯定是nginx的问题,查看nginx日志发现,正常的静态资源的请求链接会直接代理到127.0.0.1,而不正常的会代理到[::1]及127.0.0.1两个,先怀疑是多网卡的问题,把其它虚拟网卡关掉后问题仍然存在。
在这里插入图片描述

看下我的nginx的配置:

关于localhost访问特别快而nginx配置代理后转发特别慢的解决_第1张图片

最终在我们组大神(军神)的猜测下是不是localhost出现的问题,换成ip:127.0.0.1。卧槽,果然变得无比流畅了。
猜测有可能是给路由到了ipv6的localhost上去,不知道触发原因是什么,当Proxy_To [::1]:8161,127.0.0.1:8181时,因为[::1]:8161得不到请求返回,结果一分钟超时后转而代理到127.0.0.1:8181得到返回,这就是造成某些静态资源一分钟后请求才能到达服务器的原因。所以以后nginx配置代理时尽量用ip替代域名!!!至于具体原因以后明白了再补充。

后续

之前只是找到了如何解决的方法,今天在配置host文件时候发现之前配置的好几个域名都不能用了。查找了下发现在host文件中一行127.0.0.1 对应的后面几个域名都无法访问,前面几个可以,推测host文件对于一行ip解析的域名个数是不是有限制。后来在军神的查找下(https://superuser.com/questions/932112/is-there-a-maxium-number-of-hostname-aliases-per-line-in-a-windows-hosts-file#answer-932113)说明一个ip一行只能最多对应9个域名,但是自己在测试时候发现最多可以对应10个其实。

然后发现自己的localhost正好位于十个之后,所以此时我ping localhost发现解析到了::1的地址。原因是,首先查找ipv4的localhost,因为我的配置位于十个之后,所以无法解析,host文件中查找不到localhost对应的ipv4的地址,所以去找ipv6的地址,localhost就被默认解析成了::1。
上面的环境都是在win7之下,但是在win10上ping localhost发现也是解析到::1(哪怕host文件中配置了单行的解析127.0.0.1 localhost)。终究原因是win10默认是先采用ipv6的解析(优先级高),所以在win10下ping localhost会先解析到::1。解决方法是修改win10下默认的解决host策略,可以参考:https://blog.csdn.net/ambertian/article/details/70238020

你可能感兴趣的:(nginx)