什麼是nginx?
Nginx("engine x")是一款是由俄羅斯的程序設計師Igor Sysoev所開發高性能的Web和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。
在高連接併發的情況下,Nginx是Apache服務器不錯的替代品。
nginx服務器基本特徵
- 處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝
- 無緩存的反向代理加速,簡單的負載均衡和容錯
- FastCGI,簡單的負載均衡和容錯
- 模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或 其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待
- 支持SSL 和 TLSSNI
nginx常用功能
1、Http代理,反向代理:作爲web服務器最常用的功能之一,尤其是反向代理。
Nginx在做反向代理時,提供性能穩定,並且能夠提供配置靈活的轉發功能。Nginx可以根據不同的正則匹配,採取不同的轉發策略,比如圖片文件結尾的走文件服務器,動態頁面走web服務器,只要你正則寫的沒問題,又有相對應的服務器解決方案,你就可以隨心所欲的玩。並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的服務器存在異常,他可以將請求重新轉發給另外一臺服務器,然後自動去除異常服務器。
2、負載均衡
Nginx的負載均衡是通過upstream實現的。
eg.
upstream test.aaa {
ip_hash; ## 調度算法
server 192.168.1.10:80;
server 192.168.1.11:80 down;
server 192.168.1.12:8009 max_fails=3 fail_timeout=20s;
server 192.168.1.13:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://test.aaa;
}
}
upstream 支持的負載均衡算法:
- 輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端某臺服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。
- weight
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
- fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_fair模塊。
- url_hash(第三方)
按訪問URL的hash結果來分配請求,使每個URL定向到同一個後端服務器,後端服務器爲緩存時比較適用。另外,在upstream中加入hash語句後,server語句不能寫入weight等其他參數。Nginx本身是不支持url_hash的,如果需要使用這種調度算法,必須安裝Nginx 的hash軟件包。
upstream 支持的狀態參數
- down,表示當前的server暫時不參與負載均衡。
- backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,纔會請求backup機器,因此這臺機器的壓力最輕。
- max_fails,允許請求失敗的次數,默認爲1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。
- fail_timeout,在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_timeout一起使用。
注,當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。
3、web緩存
Nginx可以對不同的文件做不同的緩存處理,配置靈活,並且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容可以的進行增刪管理。
經典前端面試題每日更新,歡迎參與討論,地址:https://github.com/daily-interview/fe-interview。
更多angular1/2/4/5、ionic1/2/3、react、vue、微信小程序、nodejs等技術文章、視頻教程和開源項目,請關注微信公衆號——全棧弄潮兒。