NGINX的幾個應用場景
兩個參考地址:
NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin
NGINX的中文網站:http://www.nginx.cn/doc/
一、Web服務器
場景需求
網站實現動靜分離,目的是讓網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作。
安裝在服務器上得(Linux服務器)http和反向代理服務組件,是一個負載均衡服務,用戶訪問服務器尤其在高並發得時候很有作用,可以用戶訪問靜態資源和動態請求分開,分配給不同得執行單元,提高響應速度;
實現方式
使用靜態服務器及反向代理2個功能,靜態資源由NGINX本地提供,動態的資源反向代理到后端的TOMCAT提供,其中TOMCAT可以和NGINX在同一台服務器也可以在不同服務器上 。
二、反向代理
場景需求
業務服務器不能直接被外部網絡訪問,即不能直接映射外網ip,需要一台代理服務器,而代理服務器能被外部網絡訪問同時又和業務服務器網絡聯通。
實現方式
使用反向代理功能,將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平台進行初步分析后供大數據平台采集和展示。主流發布的一鍵部署包已包含地理位置庫插件。