解决Nacos集群搭建,Nginx负载均衡后服务注册失败
项目场景:
搭建Nacos集群后,使用Nginx实现对Nacos集群的负载均衡后,springboot服务通过Nginx方向代理注册进Nacos集群。
问题描述
启动多个nacos集群,通过Nginx反向代理,访问Nginx提供的端口可正常访问nacos首页。 但使用springboot启动服务通过nginx提供端口进行服务注册,会发现报错,以下是错误信息。而单机启动nacos ,这可以注册的上去,由此可以判定是集群模式下会出现此问题。
2022-11-27 16:05:03.925 ERROR 14532 --- [ restartedMain] c.a.c.n.registry.NacosServiceRegistry : nacos registry, nacos-payment-provider register failed...NacosRegistration{ nacosDiscoveryProperties=NacosDiscoveryProperties{ serverAddr=localhost:9527, endpoint=, namespace=, watchDelay=30000, logName=, service=nacos-payment-provider, weight=1.0, clusterName=DEFAULT, namingLoadCacheAtStart=false, metadata={ preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip=192.168.155.1, networkInterface=, port=9001, secure=false, accessKey=, secretKey=}}, java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:9527]) tried: failed to req API:localhost:9527/nacos/v1/ns/instance. code:400 msg: <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 Nov 27 16:05:03 CST 2022</div><div>There was an unexpected error (type=Bad Request, status=400).</div><div>receive invalid redirect request from peer 192.168.155.1</div></body></html> at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:464) ~[nacos-client-1.1.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.reqAPI(NamingProxy.java:386) ~[nacos-client-1.1.1.jar:na] at com.alibaba.nacos.client.naming.net.NamingProxy.registerService(NamingProxy.java:188) ~[nacos-client-1.1.1.jar:na] ...........................
原因分析:
应该是nacos 注册时,需要找网卡的 ip地址,但是有多个. 而注册时轮询找的第一个网卡的ip地址. 我们查看nacos的集群配置文件cluster.conf也得到了验证,发现会多出来一条不属于自己配置的ip端口。
解决方案:
- 先禁用 虚拟机的网卡 打开“网络和Internet设置”–更改适配器选项,点击右键禁用
- 修改每个nacos-serverconf 的cluster.conf,将多出来的配置删除掉。
- 删除每个nacos-server下的data文件夹
- 重启nacos集群和微服务,访问localhost:9527,即可发现服务已注册进nacos集群