最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

网关

运维笔记admin56浏览0评论

网关

网关

文章目录

    • 网关概念
    • Nginx网关
      • 跨域问题
    • Gateway网关
      • 请求转发+负载均衡
      • 实战开发及原理
    • 跨域问题
    • 不同网关对比
    • 注意

网关概念

网关–百度百科
类似WIFI连接的手机端或者网线连接的电脑端通过家庭版路由器进行HTTP需求转发等
网关和DNS服务器的关系就类似Gateway和application.properties文件之间。
(网关/Gateway)通过(DNS服务器/application.properties)确定路由映射地址,从而实现路由映射。


举例说明

假设你的名字叫小不点(很小,这里你就是一个url地址,指向某个网页资源),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。
但是你家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里和父母有了下面的对话:
小不点:妈妈(或爸爸),我想找班主任查一下小明的电话号码行吗?家长:好,你等着。(接着你家长给你的班主任拨了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99
小不点:太好了!妈(或爸),我想找小明,你再帮我联系一下小明吧。
家长:没问题。(接着家长向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家家长那里,然后他家长把电话给转到小明).
就这样你和小明取得了联系。
如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。默认网关。默认网关一般填写192.168.x.1

DNS是指:域名系统(DomainNameSystem)。在Internet上域名与公网IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析系统来完成,DNS就是进行域名解析的系统。【dns是系统,对域名和ip地址进行翻译转换】

Nginx网关

Nginx
nginx就是网关中间件,负责双方待沟通终端的定位和信息转发。
请求转发 负载均衡 动静分离 反向代理

跨域问题

跨域原因:前后端分离项目运行的端口不一致
Controller类上添加@CrossOrigin注解

Gateway网关

Gateway网关可以整合Nacos服务注册中心 负载均衡。

请求转发+负载均衡

Nacos注册绑定微服务名和端口号,Feign和Gateway网关基于微服务名识别拼凑微服务端口号。

实战开发及原理

SpringCloud
前提所有微服务都要提前注册Nacos,将服务名绑定对应端口号。
Nacos注册绑定微服务名和端口号,Feign和Gateway网关基于微服务名识别拼凑微服务端口号

  • 新建一个网关微服务用于配置网关映射转发请求准则(Controller类的相对访问路径)
  • 网关启动类注册Nacos服务然后就可以通过Nacos实现终端请求映射的对应微服务端口根路径的获取(http://localhost:端口号)
  • 最后根据获取的端口根路径和映射准则就可以实现终端请求的交互转发 (具体Controller层绝对访问路径)

最终目的:拼凑出对应微服务Controller层方法的绝对访问路径(http://localhost:端口号/****) 才能通过HttpClient实现最终转发调用交互等功能

配置文件

# 服务端口
server.port=8222
# 服务名
spring.application.name=service-gateway
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true#设置路由id
spring.cloud.gateway.routes[0].id=service-acl
#设置路由的uri   lb://nacos注册服务名称
spring.cloud.gateway.routes[0].uri=lb://service-acl
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/acl/**

跨域问题

当一个请求 URL 的协议、域名、端口三者之间任意一个与当前页面 URL 不同即为跨域

Nginx需要在每个Controller类上添加@CrossOrigin注解
Gateway的话只需要一个固定写法的跨域配置类并且需要去掉Controller类上@CrossOrigin否则会导致出错

@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

不同网关对比

功能相同,配置类似,原理一致
最终目的:拼凑出对应微服务Controller层方法的绝对访问路径(http://localhost:端口号/****) 才能实现最终转发调用交互等功能

注意

注意注意注意若是网关失败(Network error)必然是因为最终拼凑的URL出错或者拼凑URL的过程出错。
例如:Gateway网关,网关配置文件中我将微服务在Nacos注册的服务名写错,导致最终URL拼凑出错。
还有种可能对应微服务没有注册Nacos,无法映射服务名对应的运行端口,拼凑URL出错。
当然也可能因为对应微服务没启动。
还有可能未去掉Controller类上@CrossOrigin导致跨域出错。

发布评论

评论列表(0)

  1. 暂无评论