现在比较流行前后端分离,然而前后端分离就难免会产生跨域请求,所以很多人都听说过反向代理。一说到反向代理,可能大多数人都会想到Nginx。那究竟什么是Nginx服务器呢?安装Nginx详见文章:玩转服务器---运行环境搭建
简介
Nginx是一个高性能的HTTP和反向代理服务,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
优点
1.在连接高并发的情况下,Nginx是Apache服务不错的替代品。Nginx是将数据的承载量分摊到多个服务器进行执行。
2.Nginx是一个跨平台服务器,可以作为反向代理来进行负载均衡的实现,带来极大的稳定性。
3.支持SSL与gzip。(gzip模块需要zlib库,ssl功能需要openssl库)
反向代理
反向代理其实是指以代理服务器来接受前端的连接请求,然后代理服务器将连接请求转发给内部网络上的服务器。并将从服务器得到的结果返回给前端。此时代理服务器对外就表现为一个反向代理服务器。这里可能分成两种情况:一种为真实服务器不能被外部网络访问,所以需要一台代理服务器,它既能被外部网络访问,又与真实服务器处于同一网络环境,来完成代理请求。第二种就是前后端端口不一致导致跨域请求。
我这里简单贴一段实现Nginx反向代理的配置文件:
可能没配置过反向代理的童鞋,会无法理解反向代理到底是如何工作的。反向代理我们更常用来处理跨域请求。特别现在前后端项目一般都进行分离,一般端口不一致,直接访问的话就会出现跨域请求,所以可以选择把所有需要进行调用服务端的跨域请求的接口路径全部放置在统一的路径下,比如上图配置文件我前端跑在80端口,我配置了所有访问api路径的请求通过代理转发到4001接口,我在前端需要访问所有文章标题,正常情况我的接口地址应该是https://www.niyueling.cn/api/client/articleList,可以看到这个接口在api路径之下,但是直接调用的话会在80端口通过ajax调用该接口,但是我后端是运行在4001接口的,所以会出现跨域取不到数据,这时候就需要进行反向代理,将所有针对api路径的操作通过Nginx反向代理转发到4001端口。配置如图一样设置,访问的接口如果包含api路径,就将请求转发到4001端口,很明显,获取文章标题的接口地址https://www.niyueling.cn/api/client/articleList是包含api路径的,所以Nginx就会在发起ajax调用该接口的时候进行代理请求,代理到4001端口,取到所有符合条件的数据,然后返回给前端。如果有多个需要进行跨域接口的路径都类似,接口放在api路径下面。然后直接在Nginx配置文件将所有针对api路径接口直接代理到后端服务所在的端口,就可以成功实现反向代理。
反向代理对外都是透明的,访问者并不知道自己访问的是代理服务器,访问者也不清楚服务端口的存在,所以你调试会发现,前端获取文章标题是不会显示4001端口的,因为反向代理是透明的,所以对于客户端来说并不知道处理自己请求的是一台代理服务器。
其实提到Nginx的反向代理,就不得不提到Nginx的负载均衡。负载均衡的配置就不在这里讲了,过几天单独出一篇文章介绍Nginx的负载均衡。本篇文章内容到这里结束,谢谢观看!