NGINX的应用场景

一、Web服务器
场景需求
网站实现动静分离,目的是让网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。

安装在服务器上得(Linux服务器)http和反向代理服务组件,是一个负载均衡服务,用户访问服务器尤其在高并发得时候很有作用,可以用户访问静态资源和动态请求分开,分配给不同得执行单元,提高响应速度;

实现方式
使用静态服务器及反向代理2个功能,静态资源由NGINX本地提供,动态的资源反向代理到后端的TOMCAT提供,其中TOMCAT可以和NGINX在同一台服务器也可以在不同服务器上 。

二、反向代理
场景需求
业务服务器不能直接被外部网络访问,即不能直接映射外网ip,需要一台代理服务器,而代理服务器能被外部网络访问同时又和业务服务器网络联通。

意义:
nginx是一个高性能的web服务器。通常用来在前端做反向代理服务器。所谓正向与反向(reverse),只是英文说法翻译。代理服务,简而言之,一个请求经过代理服务器从局域网发出,然后到达互联网上服务器,这个过程的代理为正向代理。如果一个请求,从互联网过来,先进入代理服务器,再由代理服务器转发给局域网的目标服务器,这个时候,代理服务器为反向代理(相对正向而言)

实现方式
使用反向代理功能,将NGINX服务器映射外网ip,业务服务器无需映射外网ip,外网用户访问时首先访问NGINX服务器,然后再由NGINX服务器访问业务服务器资源后转发给用户,目前主流推荐采用此方案,这样既满足了业务需外网访问的需求,又满足业务服务器的安全。

三、统一访问入口
场景需求
多套业务系统需使用同一个ip或者域名进行访问,以不同后缀进行区分,需要一台NGINX服务器做统一的访问入口。

实现方式
使用反向代理功能,将所有NGINX服务器作为外网或内网用户统一的访问入口,然后根据设置的localtion规则匹配不同的后缀转发至不同的业务服务器。通常和上一个反向代理场景结合使用实现使用一个域名来访问多个业务系统,同时甚至还可以实现统一的https访问,实现方式为在NGINX服务器上配置证书,后端所有业务服务器无需每台额外配置证书即可实现https访问。

四、负载均衡
场景需求
主流分布式架构方案中实现将请求按一定的策略分发至后端多台业务服务器,实现业务服务的高可用及高并发。

实现方式
实际相当于使用反向代理和负载均衡2个功能,根据配置的url后缀规则转发至upstream中各服务器列表,默认按轮询策略,同时还支持权重和ip_hash ,有redis缓存登录seesion的方案中推荐使用轮询策略,否则使用ip_hash策略实现同一ip的用户请求固定至后端同一台服务器

五、解决浏览器跨域问题
场景需求
跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。跨域有很多解决办法,NGINX只是解决办法其中之一,适用于不改目标服务器配置,又能提供搭建一个中转NGXIN服务器的场景。

实现方式
使用NGIXN反向代理功能,如下图某项目实际案例,需实现访问主程序业务服务A中首页桌面嵌套业务服务B的相关页面,使用NGINX作为统一入口,当配套到业务服务A嵌套页面url后缀时转发至业务服务B。相当于NGINX服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。此案例中3个服务在同一台服务器上也产生跨域问题,针对3个服务在不同服务器的场景此方案也适用,原理是一样的。

六、行为分析
场景需求
需统计整个系统访问的浏览器信息、IP、地理位置、操作系统等信息作为项目上大数据展示的初始数据来源。

实现方式
通常搭配反向代理、统一访问入口的场景,使用NGINX的日志及地理位置库插件来采集信息,然后由eCloud平台进行初步分析后供大数据平台采集和展示。主流发布的一键部署包已包含地理位置库插件。

nginx配置 web服务器

使用的web框架:python-flask

nginx部署前端项目 nginx部署web_反向代理


如图:listen监听的端口号就是外部流量访问web服务器的port

url路径大致为: http://10.1.118.38:2020 可以在浏览器中访问。如果配置了高可用,其中的ip 也可以换成VIP,照样可以访问。

而 proxy_pass 则就是代理的web 框架下程序服务的IP和端口。一般可以直接指明该IP,也可以使用如图upstream meo_cluster 指出所有程序服务的ip列表。

大致过程就是外部流量根据 http://10.1.118.38:2020 访问到nginx.。然后nginx 通过反向代理到 web server上。而web server的IP 就是 上图 proxy_pass 或者 upstream meo_cluster下的IP。