跨域
跨域就是协议+域名+端口不同的服务器不能互相请求,企业级解决办法一般是通过Nginx反向代理实现
我们服务,线上都是通过S3服务器的Nginx反向代理解决跨域问题,因为Nginx和服务端沟通属于服务器之间的问题,不像浏览器有同源策略限制
提问:nginx也是一个服务器,为什么客户端跟nginx发请求时 不会出现跨域?
方案一(笔者认为不现实,同源意味着部署了同一域名端口,限制太大):浏览器应该是访问同源的nginx,然后ngnix去请求真正的后端(这里跨域了,但是不是浏览器在请求,所以没问题),nginx请求成功后把请求的结果返回浏览器
慕课老师的答案:前端到nginx的跨域问题nginx底层已经处理好了
前端的本地调用比较特殊,通过修改config/host和config/index就可以实现本地访问,这是通过node实现的。node也是一个服务器,可以搜npm底层去了解,首先在调用api中指定了hostype
根据hostype中指定的参数到config/index中去找到对应转发规则,这个规则可以理解为Nginx中的转发,这里底层就是通过node代理实现
然后回到Target中找到config/index中对应的转发目的地,这里指定了我们本机服务及端口
网关
考虑一个问题,我们分布式系统中有N+个服务,每个服务部署在不同的机器+端口,我们有一个统一的前端页面,要访问十个不同服务的接口,那么每个接口都要配置对应服务的ip+端口,这显然不合理,所以这里前段访问的是统一的域名htttp://域名/gateway/context-path,服务监测到/gateway,请求统一先转发到网关服务,网关根据context-path,转发到服务所在ip+端口
下面是网关转发的一个配置
可能有疑惑,这里并没有配置具体ip+端口,只是配置了个域名
这就到了第二步,根据配置的转发内容http://xxx.api/funds-fx-omc/运维会在根据域名和context-path unds-fx-omc再设置一层转发,最终就转发到了目标服务所在ip+端口,这里的转发规则一般是写死的脚本
再来看个不一样的,如果微服务都接入了nacos,可以直接通过制定服务名来转发