下文摘自孙卫琴的经典书籍《Spring Cloud Alibaba微服务开发零基础入门到实操》,介绍了在Spring Cloud Alibaba中把Nacos集群与Nginx反向代理整合的步骤。
如果没有使用Nginx反向代理,当微服务模块访问Nacos集群,必须在bootstrap.properties文件中列出所有Nacos节点的地址,例如以下配置代码列出了两个Nacos节点的地址:
spring.cloud.nacos.discovery.server-addr=
127.0.0.1:8810,127.0.0.1:8820,127.0.0.1:8830
spring.cloud.nacos.config.server-addr=
127.0.0.1:8810,127.0.0.1:8820,127.0.0.1:8830
假如Nacos集群中有50个节点,就必须在bootstrap.properties文件中列出50个节点的地址。如果一些节点的地址发生变化,就必须修改bootstrap.properties文件。
由此可见,在bootstrap.properties文件中列出所有节点的地址,会降低软件的可维护性。一种改进办法是使用Nginx反向代理服务器。
Nginx是高性能的HTTP服务器和反向代理服务器,能够保证负载均衡。Nginx的官方下载网址参见本文技术支持网页(www.javathinker.net/alibaba)的【链接9】。
当代理服务器为客户端提供代理,访问目标服务器,称为正向代理。当代理服务器为服务器端提供代理,向目标客户提供服务,称为反向代理。
把Nginx的安装压缩包解压到本地,运行其根目录下的nginx.exe程序,就会启动服务器。Nginx服务器监听的默认端口为80。在浏览器中访问http://localhost,如果出现图1所示的网页,就表示Nginx服务器启动成功。
图1 Nginx服务器的主页
如图2所示,把Nacos集群和Nginx服务器整合后,hello-config微服务模块不再直接访问Nacos1、Nacos2和Nacos3节点,而是访问Nginx服务器,由Nginx服务器把请求转发给集群中的Nacos节点。
图2 hello-config微服务模块通过Nginx服务器访问Nacos集群
Nacos集群与Nginx服务器整合的步骤如下。
(1)修改Nginx安装目录下的conf/nginx.conf文件,增加需要代理的Nacos节点的地址,以及代理转发的URL:
#所代理的Nacos节点的地址
upstream nacos {
server 127.0.0.1:8810;
server 127.0.0.1:8820;
server 127.0.0.1:8830;
}
server {
listen 80;
server_name localhost;
#指定代理转发URL
location / {
proxy_pass http://nacos;
}
……
}
假定Nginx服务器运行在本地主机上,以上代理转发URL表明,当用户请求访问的URL为:http://localhost/,该请求将由Nginx接收,Nginx再转发给http://nacos所对应的Nacos集群中的节点。
(2)分别启动Nginx服务器、Nacos1、Nacos2和Nacos3节点。
(3)通过浏览器访问http://localhost/nacos,Nginx服务器会把该请求转发给Nacos集群中的节点,最后返回Nacos服务器的管理平台页面。
(4)修改hello-config模块的bootstrap.properties文件,把原先Nacos服务器的地址改为Nginx服务器的地址:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:80
spring.cloud.nacos.config.server-addr=127.0.0.1:80
(5)再重复步骤(3),在Nacos节点的管理平台,会看到在服务列表中注册了hello-config-service微服务。
阿云:“当用户每次通过Nginx服务器访问Nacos集群,Nginx服务器把请求转发给哪个Nacos节点呢?”
答主:“Nginx服务器具有负载均衡的功能,会按照特定的算法选择一个Nacos节点响应请求。”
想要循序渐进学习Spring Cloud微服务开发,强烈推荐看孙卫琴老师的经典著作《Spring Cloud Alibaba微服务开发零基础入门到实操》,还附赠121集配套视频课程,免费观看网址参见http://www.javathinker.net/alibaba
本书深入浅出地讲解了利用Spring Cloud Alibaba框架开发分布式微服务系统的技术,详细阐述了各种组件的用法,包括:注册和配置中心Nacos、负载均衡器LoadBalancer、远程调用组件OpenFeign、远程调用框架Dubbo、流量控制组件Sentinel、网关Gateway、链路追踪组件SkyWalking、消息中间件Stream和 RocketMQ、分布式事务管理框架Seata、分库分表中间件ShardingSphere、分布式缓存数据库Redis、分布式任务调度框架XXL-JOB。
本书以一位学习微服务开发的新手阿云向答主(本书作者)请教微服务开发技术为线索,激发读者主动探索知识的学习兴趣,把本来看似深奥复杂的分布式微服务系统如庖丁解牛般剖析得淋漓尽致,浅显易懂。本书不仅详细介绍各种技术的使用步骤,而且运用了许多生动形象的生活化的比喻,帮助读者理解这些技术的运作原理。
本书的范例很具有实用性,整合了Spring Boot、Spring Cloud Alibaba、Hibernate、Mybatis、DruidDataSource、HikariDataSource、lombox软件包、SLF4J等流行的框架或工具软件。
本书主要面向所有具有Java编程基础的开发人员和在校学生。对于不熟悉Java编程的读者,阅读本书,也能领略Spring Cloud Alibaba框架的基本用法和微服务开发的核心思想。本书还可作为高校和企业的微服务开发教材。