文章原創於公衆號:程序猿周先森。本平臺不定時更新,喜歡個人文章,歡迎關注個人微信公衆號。
php
Nginx同Apache同樣都是一種WEB服務器。基於REST架構風格,以統一資源描述符URI或者統一資源定位符URL做爲溝通依據,經過HTTP協議提供各類網絡服務。然而,這些服務器在設計之初受到當時的用戶規模,網絡帶寬,產品特色等侷限而且各自的定位和發展都不盡相同。這也使得各個WEB服務器有着各自鮮明的特色。Apache的發展時期很長,它有着不少優勢:穩定、開源、跨平臺等等。因此它被設計爲一個重量級的WEB服務器,可是它不支持高併發。在Apache上進行併發訪問,會致使服務器消耗大量內存。操做系統對其進行進程或線程間的切換也消耗了大量的CPU資源,致使HTTP請求的平均響應速度下降。這時候輕量級高併發服務器Nginx就應運而生了。python
Nginx爲何會火爆互聯網呢?正是因爲Nginx的幾大顯著的特色存在:nginx
衆所周知,Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP三、SMTP代理服務器;Nginx能夠做爲一個HTTP服務器進行網站的發佈處理,另外Nginx能夠做爲反向代理進行負載均衡的實現。而說到代理,又分爲正向代理與反向代理。算法
正向代理segmentfault
正向代理也是你們最常接觸的到的代理模式,那究竟什麼是正向代理呢?咱們都知道Google在國內是沒法正常訪問的,可是某些時候咱們因爲技術問題須要去訪問Google時,咱們會先找到一個能夠訪問Google的代理服務器,咱們將請求發送到代理服務器,代理服務器去訪問Google,而後將訪問到的數據返回給咱們,這樣的過程就是正向代理。後端
正向代理的特色緩存
正向代理最大的特色是客戶端須要明確知道要訪問的服務器地址,Google服務器只清楚請求來自哪一個代理服務器,而不清楚來自哪一個具體的客戶端,正向代理能夠隱藏真實客戶端的具體信息。
安全
客戶端必須設置正向代理服務器,並且須要知道正向代理服務器的IP地址以及代理程序的端口。一句話來歸納就是正向代理代理的是客戶端,是一個位於客戶端和Google服務器之間的服務器,爲了從Google服務器取得數據,客戶端向代理服務器發送一個請求並指定目標(Google服務器),而後代理向原始服務器轉交請求並將得到的數據返回給客戶端。服務器
正向代理的使用:微信
反向代理
說完了什麼是正向代理,咱們接下來看看什麼叫作反向代理,若是咱們網站每日訪問量達到某個上限,單個服務器遠遠不能符合咱們平常需求,這時候咱們首先會想到分佈式部署。經過部署多臺服務器來解決訪問人數限制的問題,而後咱們功能其實大部分都是經過Nginx反向代理來實現的。咱們能夠看下圖:
反向代理的特色
咱們能夠清楚的看到,多個客戶端給服務器發送的請求,Nginx服務器接收到請求之後,按照必定的規則轉發到不一樣的服務器進行業務邏輯處理。此時請求來源於哪一個客戶端是肯定的,可是請求由哪臺服務器處理的並不明確,Nginx扮演的就是一個反向代理角色。能夠這樣來理解,反向代理對外都是透明的,訪問者並不知道本身訪問的是一個代理。反向代理代理的是服務端,主要用於服務器集羣分佈式部署的狀況下,反向代理隱藏了服務器的信息。
反向代理的使用:
正向代理與反向代理區別
負載均衡
Nginx既然扮演了反向代理的角色,它是以依據什麼樣的規則進行請求分發的呢?分發的規則是否能夠控制呢?負載量按照必定的規則進行分發到不一樣的服務器處理的規則,就是一種均衡規則。將服務器接收到的請求按照規則分發的過程,稱爲負載均衡。
Nginx支持的負載均衡調度算法方式以下:
注意:
做爲一個Nginx的使用者,在編寫配置文件確定出現過問題,可能常常須要將大量時間花費在配置文件編寫上面。因此接下來順便介紹一個在線快速生成Nginx配置文件的網站:
https://nginxconfig.io/
這個網站支持http,https,php,python,Node,緩存,日誌等各類配置選項,能夠在線生成Nginx的配置文件。並且使用方法極其簡單,只須要在網站內填寫對應的需求,就能夠一鍵生成配置文件。
參數說明:
而後在下面就能夠生成對應的nginx配置文件。咱們能夠下載zip包或者直接複製替換咱們的配置文件:
而後替換結束服務器nginx的配置文件,使用nginx -t命令測試文件是否存在問題,若配置文件沒問題,則使用 nginx -s reload命令重啓服務器。替換以前爲了確保不會發生意外,最好提早作好配置文件的備份。
若是喜歡個人文章,歡迎關注個人我的公衆號:程序猿周先森。