nginx
1、什么是Nginx
Nginx是一個高性能的HTTP和反向代理服務器,及電子郵件代理服務器,同時也是一個非常高效的反向代理、負載平衡。
2、為什么要用Nginx
跨平台、配置簡單,非阻塞、高並發連接:處理2-3萬並發連接數,官方監測能支持5萬並發,
內存消耗小:開啟10個nginx才占150M內存 ,nginx處理靜態文件好,耗費內存少,
內置的健康檢查功能:如果有一個服務器宕機,會做一個健康檢查,再發送的請求就不會發送到宕機的服務器了。重新將請求提交到其他的節點上。
節省寬帶:支持GZIP壓縮,可以添加瀏覽器本地緩存
穩定性高:宕機的概率非常小
接收用戶請求是異步的:瀏覽器將請求發送到nginx服務器,它先將用戶請求全部接收下來,再一次性發送給后端web服務器,極大減輕了web服務器的壓力,一邊接收web服務器的返回數據,一邊發送給瀏覽器客戶端, 網絡依賴性比較低,只要ping通就可以負載均衡,可以有多台nginx服務器 使用dns做負載均衡,事件驅動:通信機制采用epoll模型(nio2 異步非阻塞)
3、為什么Nginx性能這么高
得益於它的事件處理機制:異步非阻塞事件處理機制:運用了epoll模型,提供了一個隊列,排隊解決
4、Nginx是如何處理一個請求的
首先,nginx在啟動時,會解析配置文件,得到需要監聽的端口與ip地址,然后在nginx的master進程里面先初始化好這個監控的socket,再進行listen,然后再fork出多個子進程出來, 子進程會競爭accept新的連接。此時,客戶端就可以向nginx發起連接了。當客戶端與nginx進行三次握手,與nginx建立好一個連接后,此時,某一個子進程會accept成功,然后創建nginx對連接的封裝,即ngx_connection_t結構體,接着,根據事件調用相應的事件處理模塊,如http模塊與客戶端進行數據的交換。最后,nginx或客戶端來主動關掉連接,到此,一個連接就壽終正寢了
5、正向代理
一個位於客戶端和原始服務器之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器),然后代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端才能使用正向代理
正向代理總結就一句話:代理端代理的是客戶端
6、反向代理
反向代理是指以代理服務器來接受internet上的連接請求,然后將請求,發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器
反向代理總結就一句話:代理端代理的是服務端
7、動態資源、靜態資源分離
動態資源、靜態資源分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們就可以根據靜態資源的特點將其做緩存操作,這就是網站靜態化處理的核心思路,動態資源、靜態資源分離簡單的概括是:動態文件與靜態文件的分離
8、為什么要做動、靜分離
在我們的軟件開發中,有些請求是需要后台處理的(如:.jsp,.do等等),有些請求是不需要經過后台處理的(如:css、html、jpg、js等等文件),這些不需要經過后台處理的文件稱為靜態文件,因此我們后台處理忽略靜態文件。這會有人又說那我后台忽略靜態文件不就完了嗎,當然這是可以的,但是這樣后台的請求次數就明顯增多了。在我們對資源的響應速度有要求的時候,我們應該使用這種動靜分離的策略去解決,動、靜分離將網站靜態資源(HTML,JavaScript,CSS,img等文件)與后台應用分開部署,提高用戶訪問靜態代碼的速度,降低對后台應用訪問,這里我們將靜態資源放到nginx中,動態資源轉發到tomcat服務器中
9、負載均衡
負載均衡即是代理服務器將接收的請求均衡的分發到各服務器中,負載均衡主要解決網絡擁塞問題,提高服務器響應速度,服務就近提供,達到更好的訪問質量,減少后台服務器大並發壓力