? ? ? ?大家好,我是IT修真院成都分院第8期的JAVA學員鄒蘇,一枚正直純潔善良的java程序員。 今天給大家分享一下,修真院官網Java任務2,深度思考中的知識點————nginx服務器有什么作用?什么叫反向代理?為什么要使用反向代理?
1.背景介紹
nginx是什么?
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,
其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,
中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等
2.知識剖析
nginx服務器有什么作用?
1、反向代理:反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,
然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,
簡單來說就是真實的服務器不能直接被外部網絡訪問,想要訪問必須通過代理。
2、負載均衡:負載均衡也是 Nginx 常用的一個功能,當有2臺或以上服務器時,根據規則隨機的將請求分發到指定的服務器上處理,
負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而Nginx目前支持自帶3種負載均衡策略,
還有2種常用的第三方策略。
3、HTTP服務器:Nginx本身也是一個靜態資源的服務器,當只有靜態資源的時候,就可以使用Nginx來做服務器,同時現在也很流行動靜分離,就可以通過Nginx來實現
4、正向代理:意思是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),
然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。
為什么要使用反向代理?
反向代理的主要作用是分發請求。
假定一個接口請求返回數據100k,10個并發請求就是1M,那么千兆網卡,可以支撐并發10000個請求
,假設我們收到請求馬上就返回,那么最高并發數就是我們上面計算的結果,但是,問題在于,
應用服務器做不到馬上返回,因為它有很多業務邏輯需要執行處理,
比如給用戶發推送發短信發郵件,本地磁盤寫日志,請求數據庫增刪改查,調用微信的登錄接口等等等等。
木桶理論取最短板,假如拖后腿的這個,最佳狀態也只能優化到支持1000個并發,
那就尷尬了,本來能支持10000個請求的系統,只能用到1/10性能。
單個公網ip算一個節點的話,這個節點本來的潛力是響應10000個并發請求,實際在應用層面只能到1000并發,
潛力還未發掘。這個時候,就是反向代理起到用武之地的時候了。
首先一個反向代理的服務器拋開所有業務層的東西,只單純的接下請求再返回,那么可以支持到10000并發了。
接下來應用層面誰來處理?找來10個小弟,轉發給他們,每人1000正好。
這樣這個節點系統就用到了10/11的性能了。
3.常見問題
4.解決方案
5.編碼實戰
6.擴展思考
幾種負載均衡策略:
1、RR(默認):
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2、權重:
指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。
3、ip_hash
前面2種方式,在下一個請求來的時候請求可能分發到另外一個服務器,當我們的程序不是無狀態的時候(采用了session保存數據),
這時候就有一個很大的很問題了,比如把登錄信息保存到了session中,那么跳轉到另外一臺服務器的時候就需要重新登錄了,
所以很多時候我們需要一個客戶只訪問一個服務器,那么就需要用iphash了,
iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
4、fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。
下載地址:https://github.com/gnosek/nginx-upstream-fair?spm=5176.100239.blogcont73621.10.7QrfAw
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
7.參考文獻
https://www.zhihu.com/question/19761434
http://www.linuxidc.com/Linux/2017-04/142962.htm
PPT :PPT
騰訊視頻:
問題:
ip_hash 的弊端是什么?
一句話,造成負載不均。
你用的那個工具是什么呀?看起來比xshell好點?
mobaxterm.
除了nginx還有別的做負載均衡的方法嗎?
tengine、dubbo
能不能說一下反向代理和正向代理區別?
從用途上來講:
正向代理的典型用途是為在防火墻內的局域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩沖特性減少網絡使用率。反向代理的典型用途是將 防火墻后面的服務器提供給Internet用戶訪問。反向代理還可以為后端的多臺服務器提供負載平衡,或為后端較慢的服務器提供緩沖服務。
另外,反向代理還可以啟用高級URL策略和管理技術,從而使處于不同web服務器系統的web頁面同時存在于同一個URL空間下。
從安全性來講:
正向代理允許客戶端通過它訪問任意網站并且隱藏客戶端自身,因此你必須采取安全措施以確保僅為經過授權的客戶端提供服務。
反向代理對外都是透明的,訪問者并不知道自己訪問的是一個代理。
感謝大家觀看!
今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧~
我的邀請碼:17701057,或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/17701057