「每天一道面试题」Nginx使用场景

本文参考:嗨客网(www.haicoder.net)

Nginx使用场景

Nginx常用使用场景

Nginx 的常用使用场景包括 HTTP 服务器、静态服务器、反向代理、负载均衡、动静分离、统一访问入口、解决浏览器跨域问题和行为分析等。

HTTP服务器

Nginx 本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用 Nginx 来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

静态服务器

在公司中经常会遇到静态服务器,通常会提供一个上传的功能,其他应用如果需要静态资源就从该静态服务器中获取。

反向代理

反向代理应该是 Nginx 使用最多的功能了,反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。反向代理通过proxy_pass 指令来实现。

负载均衡

负载均衡也是 Nginx 常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单而言就是当有 2 台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而 Nginx 目前支持自带 3 种负载均衡策略,还有 2 种常用的第三方策略。

负载均衡通过 upstream 指令来实现。

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

统一访问入口

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

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

解决浏览器跨域问题

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

使用 NGIXN 反向代理功能,需实现访问主程序业务服务 A 中首页桌面嵌套业务服务 B 的相关页面,使用 NGINX 作为统一入口,当配套到业务服务 A 嵌套页面 url 后缀时转发至业务服务 B。相当于 NGINX 服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。

行为分析

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

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

Nginx常用使用场景总结

Nginx 的常用使用场景包括 HTTP 服务器、静态服务器、反向代理、负载均衡、动静分离、统一访问入口、解决浏览器跨域问题和行为分析等。