伺服器中的ngixe是做什麼
㈠ 負載均衡器技術Nginx和F5的優缺點對比
這是網上摘抄的文章,正好想了解一下負載均衡,看這篇文章寫的比較易懂,就。。。。
對於數據流量過大的網路中,往往單一設備無法承擔,需要多台設備進行數據分流,而負載均衡器就是用來將數據分流到多台設備的一個轉發器。
目前有許多不同的負載均衡技術用以滿足不同的應用需求,如軟/硬體負載均衡、本地/全局負載均衡、更高網路層負載均衡,以及鏈路聚合技術。
騰訊、淘寶、新浪等大型門戶及商業網站使用的是軟負載均衡器Nginx,而農行用的是F5硬負載均衡器,這里就簡單介紹下這兩種技術:
一.軟體負載均衡解決方案
在一台伺服器的操作系統上,安裝一個附加軟體來實現負載均衡,如Nginx負載均衡(我們管理系統平台使用的也是這款均衡器)。它的優點是基於特定環境、配置簡單、使用靈活、成本低廉,可以滿足大部分的負載均衡需求。
1.什麼是Nginx
Nginx ("engine x") 是一個高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。可以說Nginx是目前使用最為廣泛的HTTP軟負載均衡器,其將源代碼以類BSD許可證的形式發布(商業友好),同時因高效的性能、穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名於業界。像騰訊、淘寶、新浪等大型門戶及商業網站都採用Nginx進行HTTP網站的數據分流。
2.Nginx的功能特點
a.工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;
b.Nginx對網路的依賴比較小;
c.Nginx安裝和配置比較簡單,測試起來比較方便;
d.也可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的並發;
e.Nginx可以通過埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測;
f.Nginx對請求的非同步處理可以幫助節點伺服器減輕負載;
g.Nginx能支持http和Email,這樣就在適用范圍上面小很多;
h.不支持Session的保持、對Big request header的支持不是很好,另外默認的只有Round-robin和IP-hash兩種負載均衡演算法。
3.Nginx的原理
Nginx採用的是反向代理技術,代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器。反向代理負載均衡技術是把將來自internet上的連接請求以反向代理的方式動態地轉發給內部網路上的多台伺服器進行處理,從而達到負載均衡的目的。
二.硬體負載均衡解決方案
直接在伺服器和外部網路間安裝負載均衡設備,這種設備我們通常稱之為負載均衡器。由於專門的設備完成專門的任務,獨立於操作系統,整體性能得到大量提高,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。一般而言,硬體負載均衡在功能、性能上優於軟體方式,不過成本昂貴,比如最常見的就是F5負載均衡器。
1.什麼是F5 BIG-IP
F5負載均衡器是應用交付網路的全球領導者F5 Networks公司提供的一個負載均衡器專用設備,F5 BIG-IP LTM 的官方名稱叫做本地流量管理器,可以做4-7層負載均衡,具有負載均衡、應用交換、會話交換、狀態監控、智能網路地址轉換、通用持續性、響應錯誤處理、IPv6網關、高級路由、智能埠鏡像、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、內容緩沖、內容轉換、連接加速、高速緩存、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆—包過濾、包消毒等功能。
2.F5 BIG-IP用作HTTP負載均衡器的主要功能
a.F5 BIG-IP提供12種靈活的演算法將所有流量均衡的分配到各個伺服器,而面對用戶,只是一台虛擬伺服器。
b.F5 BIG-IP可以確認應用程序能否對請求返回對應的數據。假如F5 BIG-IP後面的某一台伺服器發生服務停止、死機等故障,F5會檢查出來並將該伺服器標識為宕機,從而不將用戶的訪問請求傳送到該台發生故障的伺服器上。這樣,只要其它的伺服器正常,用戶的訪問就不會受到影響。宕機一旦修復,F5 BIG-IP就會自動查證應用已能對客戶請求作出正確響應並恢復向該伺服器傳送。
c.F5 BIG-IP具有動態Session的會話保持功能。
d.F5 BIG-IP的iRules功能可以做HTTP內容過濾,根據不同的域名、URL,將訪問請求傳送到不同的伺服器。
三.方案優缺點對比
1.基於硬體的方式(F5)
優點:能夠直接通過智能交換機實現,處理能力更強,而且與系統無關,負載性能強更適用於一大堆設備、大訪問量、簡單應用。
缺點:成本高,除設備價格高昂,而且配置冗餘,很難想像後面伺服器做一個集群,但最關鍵的負載均衡設備卻是單點配置;無法有效掌握伺服器及應用狀態。
硬體負載均衡,一般都不管實際系統與應用的狀態,而只是從網路層來判斷,所以有時候系統處理能力已經不行了,但網路可能還來 得及反應(這種情況非常典型,比如應用伺服器後面內存已經佔用很多,但還沒有徹底不行,如果網路傳輸量不大就未必在網路層能反映出來)。
2.基於軟體的方式(Nginx)
優點:基於系統與應用的負載均衡,能夠更好地根據系統與應用的狀況來分配負載。這對於復雜應用是很重要的,性價比高,實際上如果幾台伺服器,用F5之類的硬體產品顯得有些浪費,而用軟體就要合算得多,因為伺服器同時還可以跑應用做集群等。
缺點:負載能力受伺服器本身性能的影響,性能越好,負載能力越大。
國內據說迪普和深信服做的不錯,手頭沒有啥資料,就不介紹了。
㈡ 如何安裝nginx
nginx
windows版
v1.13.3免費版http://www.ddooo.com/softdown/29113.htm
nginx
windows安裝配置方法
第一步、安裝方法
一、下載好後,把nginx
windows版軟體解壓到c盤根目錄。
二、雙擊nginx.exe圖標,可見黑窗口一閃而過,啟動完畢。
三、按下win+R快捷鍵,輸入cmd打開命令行。
四、命令行到nginx目錄,輸入nginx啟動。(注,此方式命令行窗口無任何提示,且被鎖定)
五、打開瀏覽器,輸入http://127.0.0.1,如果看到下圖片則安裝成功。
六、以後啟動軟體直接雙擊圖標即可。
七、啟動後,默認情況下(無修改配置),可見到有兩個nginx的進程,一個是master
process,一個是worker
processes測試。
第二步、配置方法
配置目標:能正常運行php腳本程序
大部分情況下,我們需要修改的配置文件只有一個,那就是nginx.conf,該文件位於conf目錄下。具體配置項目為:
1.
server_tokens
off;
出於安全方面的考慮,最好是隱藏nginx版本號信息
2.
listen
8088;
8088為監聽埠,根據需要可以填寫其它埠號
3.
server_name
localhost;
localhost為伺服器訪問名稱,也就是我們在瀏覽器里輸入的那個url地址
4.
charset
utf-8;
字元集編碼
5.
工作目錄
將如下配置
修改為:
root
定義了工作空間,也就是我們php項目所在的目錄。
加入index.php是為了讓nginx能夠識別php腳本,否則,在訪問php文件時,會出現直接下載的情況。
6.
整合php
將location
~
\.php配置部分的注釋全部去掉,最終配置如下:
注意這裡面的$document_root變數,它對應的內容就是root參數值,如果我們沒有定義root參數或者把root注釋掉,在訪問php的時候,頁面上就會出現No
input
file
specified.提示。
7.
啟動php-cgi
打開cmd命令窗口,切換到php的安裝目錄,執行php-cgi
-b
127.0.0.1:9000,即可啟動php-cgi,啟動完成後,cmd窗口切勿關閉,否則php-cgi也會被關掉的。
特別提醒:只有在開啟php-cgi的情況下,nginx才能正常訪問php。
8.
重啟nginx
打開cmd命令窗口,切換到nginx所在目錄,執行nginx
-s
reload即可重啟nginx。其它相關nginx相關命令如下:
啟動:start
nginx
停止:nginx
-s
stop
退出:nginx
-s
quit
㈢ Nginx相關知識點
Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑借開源的力量,已經接近成熟與完善。
Nginx功能豐富,可作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支持很多第三方的模塊擴展。
Nginx的穩定性、功能集、示例配置文件和低系統資源的消耗讓他後來居上,在全球活躍的網站中有12.18%的使用比率,大約為2220萬個網站。
自行安裝
正向代理: 代理伺服器站在客戶端那邊就是正向代理;
反向代理: 代理伺服器站在原始伺服器那邊就是反向代理;
詳解參考點擊 Nginx正向代理與反向代理
Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。
Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件伺服器,動態頁面走web伺服器,只要你正則寫的沒問題,又有相對應的伺服器解決方案,你就可以隨心所欲的玩。
並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的伺服器存在異常,他可以將請求重新轉發給另外一台伺服器,然後自動去除異常伺服器。
如果你的nginx伺服器給2台web伺服器做代理,負載均衡演算法採用輪詢,那麼當你的一台機器web程序iis關閉,也就是說web不能訪問,那麼nginx伺服器分發請求還是會給這台不能訪問的web伺服器,如果這里的響應連接時間過長,就會導致客戶端的頁面一直在等待響應,對用戶來說體驗就打打折扣,這里我們怎麼避免這樣的情況發生呢。這里我配張圖來說明下問題。
如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然後等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這里的響應時間如果過長,用戶等待的時間就會越長。
下面的配置是解決方案之一:
如果使用upstream指令配置了一組伺服器作為被代理伺服器,伺服器中的訪問演算法遵循配置的負載均衡規則,同時可以使用該指令配置在發生哪些異常情況時,將請求順次交由下一組伺服器處理。
狀態值可以是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
Nginx提供的負載均衡策略有2種:內置策略和擴展策略。
內置策略: 1.輪詢;2.加權輪詢;3.Ip hash;
擴展策略: 就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡演算法,給他一一找出來做下實現。
Ip hash演算法,對客戶端請求的ip進行hash操作,然後根據hash結果將同一個客戶端ip的請求分發給同一台伺服器進行處理,可以解決session不共享的問題。
eg:
開啟簡單的緩存配置,只需要兩個指令:proxy_cache_path和proxy_cache。
proxy_cache_path: 配置緩存的存放地址和其他的一些常用配置;
proxy_cache:指令是為了啟動緩存;
相關配置說明:
該指令用於定義滿足條件的響應不會被保存到緩存中。在條件字元串中至少有一個條件不為空或者0,符合這樣條件的響應才不會被緩存。
舉例如下
其中,cookie_nocache、arg_nocache...皆為變數,可以根據你訪問的匹配策略來設置,其值只有2類,0和非0;
訪問匹配策略例如:
如果在此鏈式配置中,只要有一個值不為0,則不會cache;例如:
則不會被cache.
註:一般會配合proxy_cache_bypass共同使用;
該指令用於定義哪些情況不從cache讀取,直接從backend獲取資源;配置方式同proxy_no_cache。
給緩存數據定義一個鍵,例如
該指令用於設置緩存哪些HTTP方法,默認緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.。
設置不同響應碼的緩存時間,當不指定響應碼的時候,例如
只對響應碼為200,301,302的訪問請求資源設置緩存時間,此外可以個性化定製,例如:
此外,還可以在相應header里設置優先順序更高的緩存有效時間:
不緩存包含在field的響應header,可以設置的值有:「X-Accel-Redirect」, 「X-Accel-Expires」, 「X-Accel-Limit-Rate」,「X-Accel-Buffering」, 「X-Accel-Charset」, 「Expires」, 「Cache-Control」, 「Set-Cookie」 (0.8.44), and 「Vary」。
如果上述的header field沒有設置為忽略,則header filed中有「X-Accel-Expires」, 「Expires」, 「Cache-Control」, 「Set-Cookie」, and 「Vary」的話,響應會被緩存。
該指令用於設置緩存的最小使用次數,默認值為1
源站有問題時,nginx可以通過proxy_cache_use_stale指令開啟容錯能力,即使用緩存內容來響應客戶端的請求。舉例如下:
如上配置表示,當作為cache的NGINX收到源站返回error、timeout或者其他指定的5XX錯誤,並且在其緩存中有請求文件的陳舊版本,則會將這些陳舊版本的文件而不是錯誤信息發送給客戶端。
使用NGINX,不需要建立一個RAID(磁碟陣列)。如果有多個硬碟,NGINX可以用來在多個硬碟之間分割緩存。舉例如下:
在這份配置中,使用了3個獨立的緩存,每個緩存專用一塊硬碟,另外,3個獨立的線程池也各自專用一塊硬碟。
緩存之間(其結果就是磁碟之間)的負載均衡使用split_clients模塊,split_clients非常適用於這個任務。
在 proxy_cache_path指令中設置 use_temp_path=off ,表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是為了避免在更新緩存時,磁碟之間互相復制響應數據。
通過訪問日誌,你可以得到用戶地域來源、跳轉來源、使用終端、某個URL訪問量等相關信息;
通過錯誤日誌,你可以得到系統某個服務或server的性能瓶頸等。
因此,將日誌好好利用,你可以得到很多有價值的信息。
打開nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf
日誌部分內容:
#access_log logs/access.log main;
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
默認「main」日誌格式:
參數明細表:
查看日誌命令tail -f /usr/local/nginx/logs/access.log
打開nginx.conf配置文件去掉#注釋見下圖:
自定義某一個server配置的日誌,使用「main」日誌格式。
日誌生成的到Nginx根目錄logs/access.log文件,默認使用「main」日誌格式,也可以自定義格式。
重新讀取載入Nginx配置文件:
執行命令:nginx-s reload
網上一位老師寫的log文件分解的腳本
此腳本執行時間根據自己公司情況來定,可以設置默認一天執行一次;
創建crontab設置作業
設置日誌文件存放目錄crontab -e
*/1 * * * * sh /usr/local/software/nginx/nginx_log.sh
此設置的為一分鍾,如果設置一天自行修改;
默認的 nginx 配置文件 nginx.conf 內容如下
示例
幾個常見配置項:
注意:
驚群現象:一個網路連接到來,多個睡眠的進程被同事叫醒,但只有一個進程能獲得鏈接,這樣會影響系統性能
每個指令必須有分號結束。
進入安裝目錄下的sbin