
Nacos集群 使用Nginx代理报错 Request nacos server failed
Nacos2.0以上版本集群 使用Nginx代理 报错 Request nacos server failed问题
问题:
使用Nginx代理Nacos集群后,网页可以访问,但是微服务服务连不上服务器报以下错误
com.alibaba.nacos.api.exception.NacosException: Request nacos server failed:
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:288) ~[nacos-client-2.1.0.jar:na]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:128) ~[nacos-client-2.1.0.jar:na]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:114) ~[nacos-client-2.1.0.jar:na]
at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:94) ~[nacos-client-2.1.0.jar:na]
at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:145) ~[nacos-client-2.1.0.jar:na]
环境配置
- 第一台Nacos 192.168.3.22:8848
- 第二台Nacos 192.168.3.23:8848
- Nginx配置 192.168.3.100:8850
当前Nginx 配置
#此配置在http模块下
upstream clusterHttp{
server 192.168.3.22:8848;
server 192.168.3.23:8848;
}
server {
listen 8848;
server_name localhost;
location / {
proxy_pass http://clusterHttp;
}
}
原因
Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
所以我们要在Nginx 里面增加以下配置
#注意此配置与http同级
stream{
upstream cluster{
server 192.168.3.22:9848; #访问端口+1000
server 192.168.3.23:9848; #访问端口+1000
}
server {
listen 9848; #映射出来的也是访问端口+1000
proxy_pass cluster;
}
upstream clustergrpc{
server 192.168.3.22:9849; #访问端口+1001
server 192.168.3.23:9849; #访问端口+1001
}
server {
listen 9849; #映射出来的也是访问端口+1001
proxy_pass clustergrpc;
}
}
保存好 nginx -s reload 重新加载配置即可
最后微服务就可以正常连上了
服务配置application.yml
server:
port: 8011
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 192.168.3.100:8850
discovery:
username: nacos
password: nacos
namespace: 5604d165-c335-4981-85b3-f8ceb734aae0
group: dev
config:
namespace: 5604d165-c335-4981-85b3-f8ceb734aae0
file-extension: yaml
server-addr: 192.168.3.220:8848
连接成功
2022-11-17 14:57:53.142 INFO 3539 --- [ main] c.a.n.p.a.s.c.ClientAuthPluginManager : [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2022-11-17 14:57:54.255 INFO 3539 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8011 (http) with context path ''
2022-11-17 14:57:54.284 INFO 3539 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, dev order-service 192.168.3.11:8011 register finished
2022-11-17 14:57:54.294 INFO 3539 --- [ main] com.hmportel.xxx.OrderApplication : Started OrderApplication in 3.731 seconds (JVM running for 4.453)
如果加载配置出现以下问题
nginx: [emerg] "stream" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:行数
说明你安装模块的时候 没有去安装 steam模块需要重新编译安装模块
以下以我的nginx演示 我的nginx目录
/usr/local/nginx
1.关闭nginx
ps -ef|grep nginx
#杀掉这两个进程 多个进程空格
kill -9 进程号
2.进入之前安装NGINX的安装包我的在 /home/hmpt/nginx-1.21.6/
cd /home/hmpt/nginx-1.21.6/
3.重新配置nginx并加上模块
#--prefix=/usr/local/nginx是编译好输出的位置
# --with-http_ssl_module 是ssl模块
#--with-stream是stream模块
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream
4.编译安装
make & make install
5.重新启动就可以了
cd /usr/local/nginx/sbin
./nginx
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 SNTU Studio
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果