Nginx实现网关反向代理,网关负载均衡各个微服务

491 阅读2分钟
  • 前言

在企业开发中,最常见的模式便是使用分布式架构进行企业服务平台的搭建,目前市面上流行的一套微服务架构开发是springcloud alibaba,整个微服务架构由nacos,open-feign,sentinel,springcloud gateway,nginx等组件或者应用进行搭建,本篇内容主要涉及nacos,gateway,nginx,在本地简单搭建一个类似企业开发中的服务架构。

本篇内容一般架构图为:

image.png

前端大量请求 请求至nginx服务器,nginx服务器通过反向代理的方式对网关集群进行代理,将前端接收到的请求通过负载均衡的方式负载至各个网关微服务(图中的网关集群),网关微服务再进行请求对应的业务微服务(图中的微服务集群)。

需要理解的是,网关集群其实也是微服务集群,不管是网关集群还是微服务集群,都需要注册到nacos服务中,这样才能使用springcloud gateway(网关)对微服务集群进行负载均衡(使用lb://product-service)。

所以本篇内容需要在本地下载对应的nacos服务,nginx服务,本篇内容也是基于windows环境。

  1. 首先需要创建一个微服务项目(业务微服务),注册到nacos的服务名为:product-service。

  2. 再创建一个网关微服务项目,进行网关微服务的predicates配置。

  3. 修改本地的nginx配置,对微服务网关进行反向代理,此处配置为:

  #需要代理的服务器地址(直接代理微服务地址,在这里我们代理网关集群地址,然后在我们的项目中通过网关访问对应的微服务)
	#在upstream中配置的server不应该有http://开头,格式应该直接为 ip:port
	upstream server_list{
		#下面两个是实际业务微服务地址
		#server 127.0.0.1:8050; 
		#server 127.0.0.1:8051;

		#下面是网关微服务(服务器)地址
		server 127.0.0.1:8080;
	}

	#自定义一个虚拟nginx服务器(在实际企业开发中应该替换为对应的nginx服务地址)
	#如果同时存在root命令和proxy_pass命令,只会选择执行其中一个
	 server{
		listen 81;
		server_name localhost;
		location /{
			#root html81;
			index index.html index.htm;
			proxy_pass http://server_list;
			proxy_set_header Host $http_host; 
		}
	}

通过网关进行调用业务微服务的地址为: localhost:8080/productService/stock/1
效果为:

image.png

通过nginx进行调用地址为: localhost:81/productService/stock/1

image.png

由此,成功搭建了nginx反向代理,即通过访问nginx服务器访问对应的微服务网关,然后微服务网关再进行请求对应的微服务。

本地nacos对应的服务列表如下图所示:

image.png