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

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

背景

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

解决过程

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

看下我的nginx的配置:

在这里插入图片描述

最终在我们组大神(军神)的猜测下是不是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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值