APIGateway网关安全设计
Spring Cloud里面有个组件 Zuul网关
网关和 过滤器 拦截器很相似
网关可以实现过滤器 拦截器的功能 而且可以实现Nginx的基本功能 反向代理 负载均衡ribbon
Nginx是软负载 ribbon本底客户端负载均衡
网关的核心基本作用: 路由地址 反向代理 黑名单与白名单系统(HTTP请求头的来源字段) 授权安全
DNS过程:先浏览器缓存 然后本底host文件 最后外网DNS解析 最终获取IP地址
访问虚拟的VIP
lvs是四层负载均衡 基于IP+端口号 可以管理Nginx集群
外网部署LVS (阿里云有负载均衡器可以买)
Nginx基本要求: 一主一备
Nginx走完再走网关
网关可以拦截所有服务请求: 日志管理 权限控制 限流 安全控制
既然Nginx可以实现网关,为什么需要Zuul。
Zuul使用Java开发的 。Nginx是C开发的。Nginx功能比Zuul更强大。Zuul针对微服务的,Nginx针对服务器的。
Zuul框架是微服务里面的一个组件,网关。
注意: LVS管理Nginx
搭建网关:
1、Nginx也可以实现网关。
a. 基于域名区分
b.基于项目名称
拦击域名进行跳转:
访问:
2、基于SpringCloud Zuul搭建网关
Eureka
服务A
服务B
网关的核心配置:
### 配置网关反向代理
zuul:
routes:
api-a:
path: /api-a/**
serviceId: toov5_a ##服务名称
api-b:
path: /api-b/**
serviceId: toov5_b ##服务名称
所以:
###注册 中心
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8100/eureka/
server:
port: 80
###网关名称
spring:
application:
name: service-zuul
### 配置网关反向代理
zuul:
routes:
api-a:
path: /api-a/**
serviceId: toov5_a
api-b:
path: /api-b/**
serviceId: toov5_b
pom:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RC1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <