都在用Nginx,你真的知道它的應用場景嗎?
想必大家一定聽說過 Nginx,若沒聽說過它,那麼一定聽過它的"同行"Apache 吧!
Nginx 的產生
Nginx 同 Apache 一樣都是一種 Web 伺服器。基於 REST 架構風格,以統一資源描述符(Uniform Resources Identifier)URI 或者統一資源定位符(Uniform Resources Locator)URL 作為溝通依據,透過 HTTP 協議提供各種網路服務。
然而,這些伺服器在設計之初受到當時環境的侷限,例如當時的使用者規模,網路頻寬,產品特點等侷限並且各自的定位和發展都不盡相同。這也使得各個 Web 伺服器有著各自鮮明的特點。
Apache 的發展時期很長,而且是毫無爭議的世界第一大伺服器。它有著很多優點:穩定、開源、跨平臺等等。
它出現的時間太長了,它興起的年代,網際網路產業遠遠比不上現在。所以它被設計為一個重量級的。
它不支援高併發的伺服器。在 Apache 上執行數以萬計的併發訪問,會導致伺服器消耗大量記憶體。
作業系統對其進行程式或執行緒間的切換也消耗了大量的 CPU 資源,導致 HTTP 請求的平均響應速度降低。
這些都決定了 Apache 不可能成為高效能 Web 伺服器,輕量級高併發伺服器 Nginx 就應運而生了。
俄羅斯的工程師 Igor Sysoev,他在為 Rambler Media 工作期間,使用 C 語言開發了 Nginx。
Nginx 作為 Web 伺服器一直為 Rambler Media 提供出色而又穩定的服務。然後呢,Igor Sysoev 將 Nginx 程式碼開源,並且賦予自由軟體許可證。
由於以下這幾點,所以,Nginx 火了:
Nginx 使用基於事件驅動架構,使得其可以支援數以百萬級別的 TCP 連線。
高度的模組化和自由軟體許可證使得第三方模組層出不窮(這是個開源的時代啊)。
Nginx 是一個跨平臺伺服器,可以執行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等作業系統上。
這些優秀的設計帶來的極大的穩定性。
Nginx 的用武之地
Nginx 是一款自由的、開源的、高效能的 HTTP 伺服器和反向代理伺服器;同時也是一個 IMAP、POP3、SMTP 代理伺服器。
Nginx 可以作為一個 HTTP 伺服器進行網站的釋出處理,另外 Nginx 可以作為反向代理進行負載均衡的實現。
關於代理
說到代理,首先我們要明確一個概念,所謂代理就是一個代表、一個渠道;此時就涉及到兩個角色,一個是被代理角色,一個是目標角色。
被代理角色透過這個代理訪問目標角色完成一些任務的過程稱為代理操作過程;如同生活中的專賣店,客人到 adidas 專賣店買了一雙鞋,這個專賣店就是代理,被代理角色就是 adidas 廠家,目標角色就是使用者。
正向代理
說反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸到的代理模式,我們會從兩個方面來說關於正向代理的處理模式,分別從軟體方面和生活方面來解釋一下什麼叫正向代理。
在如今的網路環境下,我們如果由於技術需要要去訪問國外的某些網站,此時你會發現位於國外的某網站我們透過瀏覽器是沒有辦法訪問的。
此時大家可能都會用一個操作 FQ 進行訪問,FQ 的方式主要是找到一個可以訪問 國外網站的代理伺服器,我們將請求傳送給代理伺服器,代理伺服器去訪問國外的網站,然後將訪問到的資料傳遞給我們!
上述這樣的代理模式稱為正向代理,正向代理最大的特點是客戶端非常明確要訪問的伺服器地址;伺服器只清楚請求來自哪個代理伺服器,而不清楚來自哪個具體的客戶端;正向代理模式遮蔽或者隱藏了真實客戶端資訊。
來看個示意圖(我把客戶端和正向代理框在一塊,同屬於一個環境,後面我有介紹):
客戶端必須設定正向代理伺服器,當然前提是要知道正向代理伺服器的 IP 地址,還有代理程式的埠。總結來說:正向代理,"它代理的是客戶端",是一個位於客戶端和原始伺服器(Origin Server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理傳送一個請求並指定目標(原始伺服器)。
然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
正向代理的用途:
訪問原來無法訪問的資源,如 Google。
可以做快取,加速訪問資源。
對客戶端訪問授權,上網進行認證。
代理可以記錄使用者訪問記錄(上網行為管理),對外隱藏使用者資訊。
反向代理
明白了什麼是正向代理,我們繼續看關於反向代理的處理方式,舉例如我國的某寶網站,每天同時連線到網站的訪問人數已經爆表,單個伺服器遠遠不能滿足人民日益增長的購買慾望了。
此時就出現了一個大家耳熟能詳的名詞:分散式部署;也就是透過部署多臺伺服器來解決訪問人數限制的問題。
某寶網站中大部分功能也是直接使用 Nginx 進行反向代理實現的,並且透過封裝 Nginx 和其他的元件之後起了個高大上的名字:Tengine。
透過上述的圖解大家就可以看清楚了,多個客戶端給伺服器傳送的請求,Nginx 伺服器接收到之後,按照一定的規則分發給了後端的業務處理伺服器進行處理了。
此時請求的來源也就是客戶端是明確的,但是請求具體由哪臺伺服器處理的並不明確了,Nginx 扮演的就是一個反向代理角色。
客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因為客戶端不需要任何配置就可以訪問。
反向代理,"它代理的是服務端",主要用於伺服器叢集分散式部署的情況下,反向代理隱藏了伺服器的資訊。
反向代理的作用:
保證內網的安全,通常將反向代理作為公網訪問地址,Web 伺服器是內網。
負載均衡,透過反向代理伺服器來最佳化網站的負載。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990085/viewspace-2755597/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 智慧安防的三大應用場景,你知道嗎?
- 你真的知道JS嗎JS
- Nginx應用場景配置Nginx
- 你真的知道Python的字串怎麼用嗎?Python字串
- 你真的知道跨域嗎跨域
- 你真的知道js的原型鏈嗎??JS原型
- Nginx主要應用場景(必讀)Nginx
- Linux各個版本應用在哪些場景?你都瞭解嗎?Linux
- 你知道Laravel Collection的實際使用場景有哪些嗎?Laravel
- 你真的知道 == 和 equals 的區別嗎?
- JDBC API的那些事,你真的知道嗎?JDBCAPI
- 全面瞭解 Nginx 主要應用場景Nginx
- 全面瞭解Nginx主要應用場景Nginx
- 你還不知道責任鏈模式的使用場景嗎?模式
- 還在用Calendar操作Date?Java8都棄用了,還不知道它的這款強大的工具嗎?Java
- iOS這些小技巧你都知道嗎iOS
- Gradle Kotlin DSL , 你知道它嗎?GradleKotlin
- 你真的知道Python的字串是什麼嗎?Python字串
- HTTP vs HTTPS: 網路通訊的加密之爭!你真的知道它們的區別嗎?HTTP加密
- 你真的會用 Babel 嗎?Babel
- 你真的瞭解HashSet 和HashMap的區別、優缺點、使用場景嗎?HashMap
- Reddit,你在用嗎?
- Python 五個有趣的彩蛋,你都知道嗎?Python
- 分享5款有趣的軟體,你都知道嗎?
- 蘋果mac隱藏的神技能,你都知道嗎蘋果Mac
- 你真的知道什麼是系統呼叫嗎?
- 關於python,你知道它的優缺點嗎?Python
- 每天都在用 Map,這些核心技術你知道嗎?
- iPhone真的好用嗎?蘋果知道嗎iPhone蘋果
- 單例模式的七種寫法,你都知道嗎?單例模式
- 冒險解謎遊戲都玩過,那操控場景本身的你試過嗎?遊戲
- Lombok經常用,但是你知道它的原理是什麼嗎?Lombok
- 你真的知道什麼是“遊戲障礙”了嗎?遊戲
- Swift之你真的知道為什麼使用weak嗎?Swift
- FRAM的應用場景
- Numpy的應用場景
- redis的應用場景Redis
- Vuex 的應用場景Vue