Nacos和Nginx集群,项目启动失败问题

一、问题描述

我是用的版本:

Nacos 2.4.3 Nginx 1.20.2

Nacos配置如下:
nginx配置如下:

全部启动后,浏览器访问:localhost/nacos,能打开控制台

application.ym配置如下:
启动项目报错:

从报错信息来看,核心问题是 Nacos 客户端尝试连接localhost:1080失败,这与 Nacos 2.x 版本引入的 gRPC 通信机制有关。

Nacos 2.x 之后,客户端与服务端的通信除了 HTTP(默认 8848),还会使用 gRPC 协议,gRPC 端口是 HTTP 端口 + 1000(例如 HTTP 端口 8848 对应 gRPC 端口 9848)。

我的 Nacos 集群节点端口是884088428844,因此对应的 gRPC 端口应为:8840+1000=98408842+1000=98428844+1000=9844

但你的 Java 项目配置了server-addr: localhost:80(通过 Nginx 代理),客户端会默认尝试连接80+1000=1080端口(这是错误的,因为 Nginx 没有代理 gRPC 端口),导致Connection refused: localhost:1080

二、解决方案:

方案一:直接配置 Nacos 集群地址

跳过 Nginx,直接在项目中配置 Nacos 集群的真实地址(包含所有节点),让客户端自动识别 gRPC 端口:

XML 复制代码
spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8840,127.0.0.1:8842,127.0.0.1:8844  # 直接配置集群节点
      discovery:
        cluster-name: HZ

客户端会自动根据每个节点的 HTTP 端口计算对应的 gRPC 端口(如 8840→9840),无需额外配置。

方案二:通过 Nginx 代理 gRPC

如果必须通过 Nginx 访问,需要额外代理 gRPC 端口(9840、9842、9844)也就是端口+1000:

  1. 新增 Nginx 的 gRPC 代理配置(注意 Nginx 需要 1.13.10 + 版本支持 gRPC):
XML 复制代码
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

	upstream nacos-cluster {
		 server 127.0.0.1:8840;  
         server 127.0.0.1:8842;  
         server 127.0.0.1:8844;  
	}
	
	server {
		listen 80;
		server_name localhost;
		
		location /nacos {
			proxy_pass http://nacos-cluster;
		}	
	}
}

# 新增内容 上方端口 + 1000

stream{
	upstream nacoscluster{
		server 127.0.0.1:9840;  
		server 127.0.0.1:9842;  
		server 127.0.0.1:9844;  
	}
	server{
		listen 1080;
		proxy_pass nacoscluster;  
	}
}
  1. 项目yml配置server-addr: localhost:80,此时客户端会通过localhost:1080访问 gRPC 代理。

三、解决验证:

方案一成功:
验证方案二:
相关推荐
毕设源码-朱学姐几秒前
【开题答辩全过程】以 基于Java的电影推荐系统为例,包含答辩的问题和答案
java·开发语言
sheji34166 分钟前
【开题答辩全过程】以 基于SSM的校园新冠疫苗接种信息管理系统为例,包含答辩的问题和答案
java·开发语言
菜鸟233号7 分钟前
力扣78 子集 java实现
java·数据结构·算法·leetcode
dddaidai12316 分钟前
深入JVM(四):垃圾收集器
java·开发语言·jvm
BBB努力学习程序设计22 分钟前
Java方法(函数)完全指南:初学者的第一个"工具箱"
java
AI科技星28 分钟前
圆柱螺旋运动方程的一步步求导与实验数据验证
开发语言·数据结构·经验分享·线性代数·算法·数学建模
laocooon52385788633 分钟前
python 收发信的功能。
开发语言·python
xixixi7777733 分钟前
STIX/TAXII:网络威胁情报的“普通话”与“顺丰快递”
开发语言·安全·php·威胁·攻击检测·stix·taxii
爬山算法36 分钟前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai36 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang