分布式專題(十五)Nginx主要配置及其應用場景

2021-10-05 10:16:35 字數 4143 閱讀 2420

目錄

一、nginx的主要配置

1. nginx虛擬主機配置

基於埠號的虛擬主機

基於網域名稱的虛擬主機

2. location的配置解析

二、nginx的應用場景

1. 反向**

2. 負載均衡

①、輪詢(預設)

②、權重

③、ip_hash

④、fair(第三方)

⑤、url_hash(第三方)

3. 動靜分離

4. 靜態快取

5. 靜態壓縮

6. 防盜煉

7. 跨域訪問

server 

}

server 

}

server 

}server

}server

}

語法規則:location [=|~|~*|^~] /uri/

查詢順序和優先順序

1:帶有「=「的精確匹配優先

2:沒有修飾符的精確匹配

3:正規表示式按照他們在配置檔案中定義的順序

4:帶有「^~」修飾符的,開頭匹配

5:帶有「~」 或「~*」 修飾符的,如果正規表示式與uri匹配

6:沒有修飾符的,如果指定字串與uri開頭匹配

location區段匹配示例

location = /

location /

location ^~ /images/

location ~* \.(gif|jpg|jpeg)$ 各

請求的處理如下例:

localhost的時候,就相當於訪問localhost:8080了

server 

}

既然伺服器可以直接http訪問,為什麼要在中間加上乙個反向**,不是多此一舉嗎?反向**有什麼作用?

負載均衡、虛擬主機等,都基於反向**實現,當然反向**的功能也不僅僅是這些。

正向**與反向**的區別?

正向**的**物件是客戶端,反向**的**物件是服務端。

正向**:服務端不知道客戶端的存在,只知道給**端nginx**

反向**:客戶端不知道服務端的存在,只知道自己連線的是**端nginx

負載均衡其意思就是分攤到多個操作單元上進行執行,例如 web 伺服器、ftp 伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。 簡單而言就是當有2臺或以上伺服器時,根據規則隨機的將請求分發到指定的伺服器上處理,負載均衡配置一般都需要同時配置反向**,通過反向**跳轉到負載均衡。 而 nginx 目前支援自帶3種負載均衡策略,還有2種常用的第三方策略。 

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

簡單配置:

upstream test 

server

}

負載均衡的核心**為:

upstream test
這裡我配置了2臺伺服器,當然實際上是一台,只是埠不一樣而已,

其實8081的伺服器是不存在的,也就是說訪問不到,但是我們訪問 http://localhost 的時候,也不會有問題,會預設跳轉到 http://localhost:8080 。

具體是因為 nginx 會自動判斷伺服器的狀態,如果伺服器處於不能訪問(伺服器掛了),就不會跳轉到這台伺服器,

所以也避免了一台伺服器掛了影響使用的情況,

由於 nginx 預設是 輪詢策略,所以我們不需要其他更多的設定。 

指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。 例如

upstream test
那麼10次一般只會有1次會訪問到8081,而有9次會訪問到8080 

上面的2種方式都有乙個問題,那就是下乙個請求來的時候請求可能分發到另外乙個伺服器,

當我們的程式不是無狀態的時候(採用了 session 儲存資料),這時候就有乙個很大的很問題了,

比如把登入資訊儲存到了 session 中,那麼跳轉到另外一台伺服器的時候就需要重新登入了。

所以很多時候我們需要乙個客戶只訪問乙個伺服器,那麼就需要用 iphash 了,

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

upstream test
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。 

upstream backend
按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同乙個後端伺服器,後端伺服器為快取時比較有效。

在 upstream 中加入 hash 語句,server 語句中不能寫入 weight 等其他的引數,

hash_method 是使用的 hash 演算法

upstream backend
思路:動、靜態的檔案,請求時匹配不同的目錄

當訪問gif,jpeg時 直接訪問e:wwwroot;,正則自行配置

server   

# 所有靜態請求都由nginx處理,存放目錄為html

# 所有動態請求都**給tomcat處理

location ~ .(jsp|do)$

error_page 500 502 503 504 /50x.html;

location = /50x.html

}

當乙個客戶端請求web伺服器, 請求的內容可以從以下幾個地方獲取:伺服器、瀏覽器快取中或快取伺服器中。這取決於伺服器端輸出的頁面資訊,瀏覽器快取將檔案儲存在客戶端,好的快取策略可以減少對網路頻寬的占用,可以提高訪問速度,提高使用者的體驗,還可以減輕伺服器的負擔nginx快取配置

nginx快取配置

nginx可以通過expires設定快取,比如我們可以針對做快取,因為這類資訊基本上不會改變。

// 在location中設定expires

// 格式: expires 30s|m|h|d

我們乙個**一定會包含很多的靜態檔案,比如、指令碼、樣式等等,而這些css/js可能本身會比較大,那麼在網路傳輸的時候就會比較慢,從而導致**的渲染速度。因此nginx中提供了一種gzip的壓縮優化手段,可以對後端的檔案進行壓縮傳輸,壓縮以後的好處在於能夠降低檔案的大小來提高傳輸效率

nginx可以通過gzip設定快取

}什麼叫跨域呢?如果兩個節點的協議、網域名稱、埠、子網域名稱不同,那麼進行的操作都是跨域的,瀏覽器為了安全問題都是限制跨域訪問,所以跨域其實是瀏覽器本身的限制。

分布式專題 分布式鎖

在傳統的單體應用架構中,遇到併發安全性問題時我們可以通過同步鎖synchronized,同步 塊,reentrantlock等方式都可以解決,但隨著業務的發展,單體應用架構不能滿足龐大的使用者請求量,於是分布式系統應用而生,在分布式系統中,由於每個系統都執行在不同的伺服器上,有著不同的jvm,所以j...

分布式限流面試專題系列之Nginx系列

nginx 是乙個 web 伺服器和反向 伺服器,用於 http https smtp pop3和 imap 協議 nginx 伺服器的特性包括 反向 l7 負載均衡器 嵌入式 perl 直譯器 動態二進位制公升級 可用於重新編寫 url,具有非常好的 pcre 支援 nginx 使用反應器模式。主...

分布式防火牆專題

寫在前面的話 隨著網路的快速普及,資訊的安全越來越受到人們的關注,其形式由傳統的防火牆 俗稱邊界防火牆 的基於 訪問控制列表 進行包過濾,逐步變得多樣化。入電路級閘道器技術,應用級閘道器技術和動態包過濾技術。與此同時過濾技術也由先前的網路層,鏈路層逐步擴充套件到 模型的所有層次上面。近期提出的分布式...