最基礎的Nginx教學

文章原創於公衆號:程序猿周先森。本平臺不定時更新,喜歡個人文章,歡迎關注個人微信公衆號。
filephp

Nginx同Apache同樣都是一種WEB服務器。基於REST架構風格,以統一資源描述符URI或者統一資源定位符URL做爲溝通依據,經過HTTP協議提供各類網絡服務。然而,這些服務器在設計之初受到當時的用戶規模,網絡帶寬,產品特色等侷限而且各自的定位和發展都不盡相同。這也使得各個WEB服務器有着各自鮮明的特色。Apache的發展時期很長,它有着不少優勢:穩定、開源、跨平臺等等。因此它被設計爲一個重量級的WEB服務器,可是它不支持高併發。在Apache上進行併發訪問,會致使服務器消耗大量內存。操做系統對其進行進程或線程間的切換也消耗了大量的CPU資源,致使HTTP請求的平均響應速度下降。這時候輕量級高併發服務器Nginx就應運而生了。python

Nginx爲何會火爆互聯網呢?正是因爲Nginx的幾大顯著的特色存在:nginx

  • Nginx使用基於事件驅動架構,使得其能夠支持數以百萬級別的TCP鏈接
  • 高度的模塊化和自由軟件許可證是的第三方模塊層出不窮(這是個開源的時代啊~)
  • Nginx是一個跨平臺服務器,能夠運行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操做系統上,這些優秀的設計帶來的極大的穩定性

衆所周知,Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP三、SMTP代理服務器;Nginx能夠做爲一個HTTP服務器進行網站的發佈處理,另外Nginx能夠做爲反向代理進行負載均衡的實現。而說到代理,又分爲正向代理與反向代理。算法

正向代理segmentfault

正向代理也是你們最常接觸的到的代理模式,那究竟什麼是正向代理呢?咱們都知道Google在國內是沒法正常訪問的,可是某些時候咱們因爲技術問題須要去訪問Google時,咱們會先找到一個能夠訪問Google的代理服務器,咱們將請求發送到代理服務器,代理服務器去訪問Google,而後將訪問到的數據返回給咱們,這樣的過程就是正向代理。後端

正向代理的特色緩存

正向代理最大的特色是客戶端須要明確知道要訪問的服務器地址,Google服務器只清楚請求來自哪一個代理服務器,而不清楚來自哪一個具體的客戶端,正向代理能夠隱藏真實客戶端的具體信息。
file安全

客戶端必須設置正向代理服務器,並且須要知道正向代理服務器的IP地址以及代理程序的端口。一句話來歸納就是正向代理代理的是客戶端,是一個位於客戶端和Google服務器之間的服務器,爲了從Google服務器取得數據,客戶端向代理服務器發送一個請求並指定目標(Google服務器),而後代理向原始服務器轉交請求並將得到的數據返回給客戶端。服務器

正向代理的使用:微信

  • 訪問國外沒法訪問的網站
  • 作緩存,加速訪問資源
  • 對客戶端訪問受權,上網進行認證
  • 代理能夠記錄用戶訪問記錄(上網行爲管理),對外隱藏用戶信息

反向代理

說完了什麼是正向代理,咱們接下來看看什麼叫作反向代理,若是咱們網站每日訪問量達到某個上限,單個服務器遠遠不能符合咱們平常需求,這時候咱們首先會想到分佈式部署。經過部署多臺服務器來解決訪問人數限制的問題,而後咱們功能其實大部分都是經過Nginx反向代理來實現的。咱們能夠看下圖:
file

反向代理的特色

咱們能夠清楚的看到,多個客戶端給服務器發送的請求,Nginx服務器接收到請求之後,按照必定的規則轉發到不一樣的服務器進行業務邏輯處理。此時請求來源於哪一個客戶端是肯定的,可是請求由哪臺服務器處理的並不明確,Nginx扮演的就是一個反向代理角色。能夠這樣來理解,反向代理對外都是透明的,訪問者並不知道本身訪問的是一個代理。反向代理代理的是服務端,主要用於服務器集羣分佈式部署的狀況下,反向代理隱藏了服務器的信息。

反向代理的使用:

  • 保證內網的安全,一般將反向代理做爲公網訪問地址,Web服務器是內網
  • 負載均衡,經過反向代理服務器來優化網站的負載

正向代理與反向代理區別

  • 在正向代理中,隱藏了請求來源的客戶端信息;
  • 在反向代理中,隱藏了請求具體處理的服務端信息;

file

負載均衡

Nginx既然扮演了反向代理的角色,它是以依據什麼樣的規則進行請求分發的呢?分發的規則是否能夠控制呢?負載量按照必定的規則進行分發到不一樣的服務器處理的規則,就是一種均衡規則。將服務器接收到的請求按照規則分發的過程,稱爲負載均衡。

Nginx支持的負載均衡調度算法方式以下:

  • weight輪詢(默認):接收到的請求按照請求順序逐一分配到不一樣的後端服務器,若是在使用過程當中,某一臺服務器宕機,Nginx會自動將該服務器剔除出隊列,請求受理狀況不會受到任何影響。這種方式下,能夠給不一樣的後端服務器設置一個權重值,權重數據越大,服務器被分配到請求的概率越大。
  • ip_hash:每一個請求按照發起客戶端的ip的hash結果進行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個後端服務器。
  • fair:智能調整調度算法,動態的根據後端服務器的請求響應時間進行均衡分配,響應時間短處理效率高的服務器分配到請求的機率高,響應時間長處理效率低的服務器分配到的請求少。
  • url_hash:按照訪問的url的hash結果分配請求,每一個請求的url會指向後端固定的某個服務器,能夠在Nginx做爲靜態服務器的狀況下提升緩存效率。

注意:

  • Nginx默認不支持fair算法,若是要使用這種調度算法,須要安裝upstream_fair模塊。
  • Nginx默認不支持url_hash調度算法,要使用的話須要安裝Nginx的hash軟件包。

做爲一個Nginx的使用者,在編寫配置文件確定出現過問題,可能常常須要將大量時間花費在配置文件編寫上面。因此接下來順便介紹一個在線快速生成Nginx配置文件的網站:

https://nginxconfig.io/

這個網站支持http,https,php,python,Node,緩存,日誌等各類配置選項,能夠在線生成Nginx的配置文件。並且使用方法極其簡單,只須要在網站內填寫對應的需求,就能夠一鍵生成配置文件。
file

參數說明:

  • Domain:綁定的域名
  • Path:根目錄所在
  • Document root:根目錄下的實際項目名稱
  • Redirect subdomains:若是訪問*.niyueling.cn會重定向跳轉到niyueling.cn

而後在下面就能夠生成對應的nginx配置文件。咱們能夠下載zip包或者直接複製替換咱們的配置文件:
file

而後替換結束服務器nginx的配置文件,使用nginx -t命令測試文件是否存在問題,若配置文件沒問題,則使用 nginx -s reload命令重啓服務器。替換以前爲了確保不會發生意外,最好提早作好配置文件的備份。

若是喜歡個人文章,歡迎關注個人我的公衆號:程序猿周先森。
file

相關文章
相關標籤/搜索