Nginx之(一)Nginx是什麼

 

 

摘自:https://blog.csdn.net/u012152619/article/details/53821518web

Nginx("engine x")是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler使用。數據庫

Nginx代碼徹底用C語言寫成,其特色是佔有內存少,併發能力強。官方測試號稱最多可以支撐5萬併發鏈接,在實際生產環境中跑到2~3萬的併發鏈接數沒什麼壓力。瀏覽器

說到Web服務器,Apache服務器和IIS服務器是兩大巨頭;可是運行速度更快、更靈活的Nginx 正在迎頭遇上。Nginx到底有多火呢?據統計,全球活躍的網站中使用了Nginx的佔比高達12.18%,中國大陸但凡你能說得上名字的網站幾乎都在使用Nginx,好比百度、京東、新浪、網易、騰訊、淘寶等。緩存

 

先來掃一下盲,看看「代理」究竟是個什麼玩意兒。安全

 

1.1 正向代理
有公就有母,有正就有反,陰陽共濟,相輔相成。瞭解反向代理以前,先來看看什麼是正向代理。服務器

咱們日常所說的代理服務器(Proxy Server)提供的就是正向代理服務,其功能是代理網絡用戶去取得網絡信息。代理位於Web客戶端和Web服務器之間,扮演「中間人」的角色。
網絡

HTTP的代理服務器既是Web服務器又是Web客戶端。一個完整的代理請求過程爲:客戶端首先與代理服務器建立鏈接,接着根據代理服務器所使用的代理協議,請求對目標服務器建立鏈接、或者得到目標服務器的指定資源,而後代理服務器再將拿到的資源返回給客戶端。session

但是,咱們的請求爲何不直來直往,而要畫蛇添足的經過代理服務器來轉達呢?代理服務器的做用大大的,經過它能夠實現多種功能併發

(1)共享IP地址負載均衡

好比,某個局域網內有十臺電腦須要上網,可是隻分配了一個IP地址。這時候就能夠將惟一的IP地址賦予代理服務器,經過NAT(Network Address Translation)協議,讓十臺電腦都能與外網連通。發送至外網的請求一概經過代理服務器轉發,代理服務器收到迴應時,再轉發給內網的請求者。

 

(2)高速緩存

大部分代理服務器都具備緩存的功能,就好像一個大的Cache,它有很大的存儲空間,它不斷將新取得數據存儲到它本地的存儲器上,若是瀏覽器所請求的數據在它本機的存儲器上已經存在並且是最新的,那麼它就不從新從Web服務器取數據,而直接將存儲器上的數據傳給用戶的瀏覽器,這樣就能顯著提升瀏覽速度。

 

(3)過濾器

外面的世界很精彩,外面的世界也很危險。有了代理服務器,媽媽不再用擔憂個人安全。

 

若是把天朝的整個網絡看作一個超大的局域網,咱們只要訪問境外的網站,都會通過一個代理服務器,就是備受「歡迎」的「長城防火牆」,也稱「中國國家防火牆」,用於自動審查和過濾監控。這麼看來,最擔憂咱們安全的還得說是祖國母親。

(4)突破自身IP的訪問限制

道高一尺,魔高一丈。代理服務器是矛是盾,看你怎麼用。

所謂的中國多媒體公衆信息網和教育網都是獨立的大型國家級局域網,是與國際互聯網隔絕的。出於各類須要,某些集團或我的在兩網之間開設了代理服務器,藉助這些代理服務器的地址,就能夠利訪問國外網站,俗稱FQ。

 

 

注意,正向代理與Nginx一毛錢關係都沒有,以上內容只是爲了引出反向代理的概念。

 

1.2 反向代理

正向代理是代理客戶端來向Internet發送請求,而反向代理是代理服務端來接受Internet上的請求。

正向代理中,proxy和client同屬一個LAN,對server透明;反向代理中,proxy和server同屬一個LAN,對client透明。 實際上proxy在兩種代理中作的事都是代爲收發請求和響應,不過從結構上來看正好左右互換了下。

再用兩個例子來比較一下正向代理與反向代理的區別。

(1)正向代理

A同窗在大衆創業、萬衆創新的大時代背景下開啓他的創業之路,目前他遇到的最大的一個問題就是啓動資金,因而他決定去找馬雲爸爸借錢,可想而知,最後碰一鼻子灰回來了,情急之下,他想到一個辦法,找關係開後門,通過一番消息打探,原來A同窗的大學老師王老師是馬雲的同窗,因而A同窗找到王老師,託王老師幫忙去馬雲那借500萬過來,固然最後事成了。不過馬雲並不知道這錢是A同窗借的,馬雲是借給王老師的,最後由王老師轉交給A同窗。這裏的王老師在這個過程當中扮演了一個很是關鍵的角色,就是代理,也能夠說是正向代理,王老師代替A同窗辦這件事,這個過程當中,真正借錢的人是誰,馬雲是不知道的,這點很是關鍵。

咱們常說的代理也就是隻正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替來請求,某些上網工具扮演的就是典型的正向代理角色。用瀏覽器訪問 http://www.google.com 時,被殘忍的block,因而你能夠在國外搭建一臺代理服務器,讓代理幫我去請求google.com,代理把請求返回的相應結構再返回給我。

 

(2)反向代理

你們都有過這樣的經歷,撥打10086客服電話,可能一個地區的10086客服有幾個或者幾十個,你永遠都不須要關心在電話那頭的是哪個,叫什麼,男的,仍是女的,漂亮的仍是帥氣的,你都不關心,你關心的是你的問題能不能獲得專業的解答,你只須要撥通了10086的總機號碼,電話那頭總會有人會回答你,只是有時慢有時快而已。那麼這裏的10086總機號碼就是咱們說的反向代理。客戶不知道真正提供服務人的是誰。

反向代理隱藏了真實的服務端,當咱們請求 www.baidu.com 的時候,就像撥打10086同樣,背後可能有成千上萬臺服務器爲咱們服務,但具體是哪一臺,你不知道,也不須要知道,你只須要知道反向代理服務器是誰就行了,www.baidu.com 就是咱們的反向代理服務器,反向代理服務器會幫咱們把請求轉發到真實的服務器那裏去。

使用反向代理的優點有不少,好比,隱藏和保護服務器資源、負載均衡,緩存靜態內容,加密和SSL加速等。

 

1.3 Nginx的功能
Nginx的啓動特別簡單,而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動。還可以不間斷服務的狀況下進行軟件版本的升級。

Nginx在作反向代理時,可以提供性能穩定而且靈活配置的轉發功能。Nginx能夠根據不一樣的正則匹配,採起不一樣的轉發策略,好比圖片文件結尾的走文件服務器,動態頁面走web服務器。Nginx還對能夠對返回結果進行異常判斷,若是被分發的服務器存在異常,會將請求從新轉發給另一臺服務器,而後自動去除異常服務器。

1.3.1 保護服務器

 

 

當客戶機向站點提出請求時,請求將轉到代理服務器。而後,代理服務器經過防火牆中的特定通路,將客戶機的請求發送到內容服務器。內容服務器再經過該通道將結果回傳給代理服務器。代理服務器將檢索到的信息發送給客戶機,好像代理服務器就是實際的內容服務器。若是內容服務器返回錯誤消息,代理服務器會先行截取該消息並更改標頭中列出的任何 URL,而後再將消息發送給客戶機。如此可防止外部客戶機獲取內部內容服務器的重定向URL。

這樣,代理服務器就在安全數據庫和可能的惡意攻擊之間提供了又一道屏障。與有權訪問整個數據庫的狀況相對比,就算是僥倖攻擊成功,做惡者充其量也僅限於訪問單個事務中所涉及的信息。未經受權的用戶沒法訪問到真正的內容服務器,由於防火牆通路只容許代理服務器有權進行訪問。

1.3.2負載均衡

 

負載均衡服務器的做用是平衡集羣中各個服務器的負載壓力。

Nginx內置的負載均衡策略有3種:輪詢,加權輪詢,IP hash。同時支持擴展策略,徹底能夠本身寫一套規則交給Nginx去執行。

(1)輪詢

 

這種策略簡單易行,將請求平均的分配給每一個服務器去處理。

(2)加權輪詢

 

 

 

升級版的輪詢策略,權重越大的服務器會被分配越多的請求數量。

(3)IP hash

 

 

 

對客戶端請求的IP進行hash操做,而後根據hash結果將同一個客戶端IP的請求分發給同一臺服務器進行處理,能夠解決session不共享的問題。

1.3.3 web緩存

 

Nginx能夠對不一樣的文件作不一樣的緩存處理,配置靈活,而且支持FastCGI_Cache,主要用於對FastCGI的動態程序進行緩存。配合着第三方的ngx_cache_purge,對制定的URL緩存內容能夠的進行增刪管理。

相關文章
相關標籤/搜索