最近在看 nacos,因为项目上的规划,需要用到微服务。虽然以前看过微服务,但是都忘得差不多了,最近项目上规划要用到微服务,所以我就去了解了解。

在学习nacos的过程中,需要nacos集群,因为是自学,所以肯定是在本地自行部署多个端口进行集群,我使用的是 nacos 1.41 版本。

nacos 的集群也十分简单,这里不做过多的讲述,我主要把坑的地方写出来,主要是 cluster.conf 配置文件,刚开始的内容配置如下:

127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

然后配置 nginx 进行反向代理到这三台机器上,nginx的配置我就不上了,这里主要是说问题。

nginx配置完成后,启动集群,再启动nginx,访问nginx代理端口,我配置的依然是80端口,访问 http://localhost/nacos ,访问没问题。

接下来就是项目上配置集群了,项目上的配置如下:

spring:
  application:
    name: orderservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:80 # nacos地址
      config:
        file-extension: yaml # 文件后缀名

ok,配置完成后,启动项目,如你所见,标题中的错误,其完整的错误日志如下:

failed to req API:/nacos/v1/ns/instance after all servers([localhost:80]) tried:
 ErrCode:400, ErrMsg:<html><body><h1>Whitelabel Error Page</h1><p>This application has no 
explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>
Sun Mar 20 17:51:42 CST 2022</div><div>There was an unexpected error (type=Bad Request, 
status=400).</div><div>receive invalid redirect request from peer 127.0.0.1</div></body>
</html>

就这个问题,我花了几个小时去查,网上愣是没看到一个能解决的答案。没有答案,我只能自己慢慢分析了。

在反复查看日志的过程中,我看到了如下错误日志

receive invalid redirect request from peer 127.0.0.1

简单的翻译就是 “无效的重定向请求”,也就是说重定向到 127.0.0.1 是无效的。

深入了解后,在不同端口启动nacos-server的集群配置文件cluster.conf中需使用【真实ip】,不然无法找到真正的实例。

所以 cluster.conf 配置文件,把 127.0.0.1 改成本机的真实 ip ,然后再重启集群,致此改问题解决。

期间还碰到了一个问题,就是配置不生效,因为 spring cloud 中 nacos 有默认的注册中心地址——localhost:8848,也就是说你不刻意加配置,他就默认走了 localhost:8848。

我的问题是,我配置了  localhost:8849,但是它给我报的错是拒绝连接,而且是连不上 localhost:8848,但是我配置的是 localhost:8849。当时就把我整懵逼了,不过一番检查下来,发现是我的格式写的有点问题,我用的yml格式,用的又是eclipse,没法知道格式是否正确,所以不小心写错,改正过来就行了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐