Nginx配置進階

Nginx是目前很火的伺服器web和反向代理伺服器

,反向代理是指以代理伺服器來接受internet上的連線請求,將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外表現為一個反向代理伺服器。且Nginx在高併發方面,有比較優異的特點。

Nginx是一款輕量級的Web伺服器、反向代理伺服器,基於 REST 架構風格,以統一資源描述符URI 或者統一資源定位符URL 作為溝通的依據,透過 HTTP 協議提供各種網路服務。由於它的

記憶體佔用少,啟動快,高併發能力強

,在網際網路專案中廣泛應用。

本文件由淺入深,主要從

安裝配置、Nginx基本模組和語法、流量限制、Nginx黑白名單、Nginx負載均衡

等幾方面進行說明。

總體說明

Nginx作為一個高效能的Http和反向代理web伺服器,接下來從

概念、架構和特點

三個方面整體介紹Nginx。

1.概述

Nginx是一款輕量級的Web 伺服器、反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上Nginx的併發能力確實在同類型網頁伺服器中表現較好,中國大陸使用Nginx網站的使用者有:百度、京東、新浪、網易、騰訊、淘寶等。

2.反向代理

反向代理伺服器,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料,在把資料返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,

暴露代理伺服器的地址,隱藏真實伺服器IP地址

Nginx配置進階

3.Nginx特點

1。

穩定性高

:用於反向代理,宕機的機率微乎其微。

2。

記憶體消耗小

:在3萬併發連線下,開啟10個Nginx程序僅消耗150M記憶體 (15M*10=150M)。

3。

高併發

:一個Nginx伺服器在不做任何配置的情況下,併發量可達1000左右。在硬體條件允許的前提下,Nginx可以支援高達5-10萬的併發量。

4。

支援熱部署

:Nginx支援熱部署,它的自動特別容易,且幾乎可以7天*24小時不間斷地執行,即使執行數月也不需要重新啟動,還能在不間斷服務的情況下,對軟體版本進行升級。

安裝配置

本次安裝需要安裝到Linux系統上,並且需要部署一個AEAI UMC產品才可以瀏覽執行。

1.前置條件

安裝make:

Nginx配置進階

安裝g++:

Nginx配置進階

安裝pcre和pcre-devel:

Nginx配置進階

安裝zlib,zlib可以提供很多壓縮和解方式,Nginx需要zlib對http進行gzip:

Nginx配置進階

安裝openssl,openssl是一個安全套接字層密碼庫,Nginx要支援https,需要使用openssl:

Nginx配置進階

2.安裝步驟

下載Nginx:

Nginx配置進階

進入資料夾:

Nginx配置進階

解壓:

Nginx配置進階

開啟檔案路徑:

Nginx配置進階

編譯檔案:

Nginx配置進階

安裝:

Nginx配置進階

3.瀏覽執行

瀏覽執行的前提是啟動AEAI UMC產品,在Nginx檔案中寫入如下內容:

Nginx配置進階

Nginx配置進階

Nginx配置進階

Nginx配置進階

藍色為產品ip+埠,紅色為Nginx埠,綠色為Nginx所在的伺服器ip

配置完成後執行如下命令,啟動Nginx:

Nginx配置進階

在瀏覽器輸入192。168。1。234:81/UMC,如下如:

Nginx配置進階

Nginx基本模組和語法

Nginx基本分為五個模組:分別為

全域性模組、events模組、http模組、server模組和location模組

1.模組介紹

1。

全域性塊

:配置影響Nginx全域性的指令。一般有執行Nginx伺服器的使用者組,Nginx程序pid存放路徑,日誌存放路徑,配置檔案引入,允許生成worker process數等。

2。

events塊

:配置影響Nginx伺服器或與使用者的網路連線。有每個程序的最大連線數,選取哪種事件驅動模型處理連線請求,是否允許同時接收多個網路連線,開啟多個網路連線序列化等。

3。

http塊

:可以巢狀多個server,配置代理,快取,日誌定義等絕大多數功能和第三方模組的配置。如檔案引入、mime-type定義、日誌自定義、是否使用sendfile傳輸檔案、連線超時時間、單連線請求數等。

4。

server塊

:配置虛擬主機的相關引數,一個http中可以有多個server。

5。

location塊

:配置請求的路由,以及各種頁面的處理情況。

2.Nginx常用全域性變數

Nginx配置進階

Nginx配置進階

3.Nginx常用配置

Nginx配置進階

Nginx配置進階

流量限制

流量限制可用作安全處理,可以減緩暴力密碼破解的速率,流量限制主要配置的兩個指令:limit_req_zone和limit_req。

1.限制訪問頻率(正常)

語法:limit_req_zone key zone rate。

模組:http。

1。Key:定義限流物件,$binary_remote_addr 針對客戶端ip限流。

2。Zone:定義共享記憶體區來儲存訪問資訊,例:zone=ip_limit:10m 限流規則名稱為ip_limit,允許使用10MB的記憶體空間來記錄ip對應的限流狀態。

3。Rate:用於設定最大訪問速率,rate=10r/s 表示每秒最多處理10個請求。

2.限制訪問頻率(突發)

語法:limit_req zone burst。

模組:server。

1。Zone:上文定義的名稱。

2。Burst:解決突發流量,表示在超過設定的處理速率後能額外處理的請求數。

3.限制併發連線數

語法:limit_conn_zone key。

模組:http。

語法:limit_conn keyname 20。

模組:server。

1。Key:定義限流物件,$binary_remote_addr 針對客戶端ip限流,$server_name限制server連線數。

2。Keyname:如果key為$binary_remote_addr表示限制單個ip同時最多能有幾個連線,如果key為$server_name表示表示虛擬主機(server) 同時能處理併發連線的總數。

Nginx黑白名單

Nginx利用deny和allow指令來實現黑白名單的配置,

利用黑白名單進行安全配置

語法:

Nginx配置進階

模組:http/server/location

1。allow:允許訪問。

2。deny:禁止訪問。

3。address:具體的ip地址。

4。CIDR:ip加掩碼形式地址。

5。all:所有ip地址。

1.黑名單

配置策略:

黑名單配置邏輯是配置禁止的ip訪問,允許其他所有的地址訪問

Nginx配置進階

配置詳解:在這個配置下,234、235和236的ip訪問不了伺服器,會顯示403 Forbidden,而其他ip都可以訪問。

2.白名單

配置策略:

白名單配置邏輯是配置允許的ip訪問,禁止其他所有的地址訪問

Nginx配置進階

配置詳解:在這個配置下,234、235和236的ip可以訪問伺服器,而其他所有ip都不允許訪問,顯示403 Forbidden。

Nginx負載均衡

Nginx預設的負載均衡策略是輪詢法,顧名思義,所有請求都按照時間順序分配到不同的服務上。

Nginx配置進階

1.加權輪詢法

指定每個服務的權重比例,weight和訪問比率成正比,通常用於後端服務機器效能不統一,將效能好的分配權重高,來發揮伺服器的最大效能。

Nginx配置進階

配置詳解:如上配置235的訪問頻率為234的二倍。

2.最少連線

將請求分配到連線數最少的服務上。

Nginx配置進階

3.IP Hash

每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。

Nginx配置進階

灰度升級

灰度升級是指

從黑到白之間,能夠平滑過渡的一種釋出方式

,讓大部分使用者繼續用A,少部分使用者使用B,如果B不出現問題再將所有使用者移植到B上。

1.來路Ip

根據$remote_addr變數進行灰度釋出:

Nginx配置進階

配置詳解:如果ip為234訪問測試環境,如果不為234則訪問生產環境。

2.Cookie

根據$http_cookie變數進行灰度釋出。

Nginx配置進階

配置詳解:如果cookie為version=V1訪問測試環境,如果不為version=V1則訪問生產環境。

3.瀏覽器UserAgent

根據$http_user_agent變數進行灰度釋出。

Nginx配置進階

配置詳解:如果瀏覽器為Chrome/93。0。4577。63訪問測試環境,如果不為Chrome/93。0。4577。63則訪問生產環境。

瀏覽器版本可在設定中檢視:

Nginx配置進階

心得體會

本次主要在開發umc接入配置中學習到了Nginx,對Nginx有了一個簡單的瞭解,以下是本次的心得體會。

1.知識收穫

在本次的開發中,學習了Nginx的相關知識和基礎操作,瞭解了Nginx相關模組的功能和使用,也讓我感受到Nginx的強大和方便之處,為我後續的學習打下堅實的基礎。

2.專案理解

本次主要開發了基於Nginx接入配置的功能,相比之前編寫的Nginx指令,接入配置功能可以方便靈活地配置Nginx檔案,更加的快速高效,可以和UMC產品有更好地融合。

3.心得總結

在本次開發UMC接入配置中,學習並使用了Nginx。此次開發接入配置的過程並不是一帆風順的,期間遇到了不少問題,也讓我感覺到了自身的不足之處,但我並沒有感到沮喪,

在工作中穩紮穩打一步步的摸索,最終找到解決的方法

此次開發使我進一步認識到學習的重要性和迫切性。

加強學習,是提高自身工作能力最直接的手段之一

,也是我們提高業務水平的迫切需要。只有透過加強學習,才能取他人之長補己之短,也只有這樣才能不負公司的重望,完成公司交給自己的工作任務。

本文由@數通暢聯原創,歡迎轉發,僅供學習交流使用,引用請註明出處!謝謝~