一、问题描述
我是用的版本:
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 集群节点端口是8840、8842、8844,因此对应的 gRPC 端口应为:8840+1000=9840、8842+1000=9842、8844+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:
- 新增 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;
}
}
- 项目yml配置
server-addr: localhost:80,此时客户端会通过localhost:1080访问 gRPC 代理。
三、解决验证:
方案一成功:

验证方案二:
