10 Nginx 後面有無 的區別

2022-07-05 11:12:14 字數 1585 閱讀 8461

寫在前面的話

在 nginx 中,我們很多時候都有乙個疑問,在 proxy_pass 或者 root 或者 location 後面需不需要加上 /,加和不加有啥區別。

root  / alias 後面的 /

root 和 alias 都是指向目錄,所以後面是否存在 / 沒有影響:

server 

location ^~ /alias/

}

我們這裡加不加紅色的 / 都一樣的結果。

location 後面的 /

在 location 中也存在是否新增 /  的情況:

server 

location ^~ /alias

}

此時兩種匹配就有了兩個含義,前者只能匹配/alis/123 這樣的,而後者可以匹配 /alias123,也可 /alias/123 這樣的。

但是當兩者同時在乙個 server 中由於匹配精確度越高優先順序越高的原因,後者匹配不到 /alias/123

proxy_pass 後面的 /

這個才是我們這次說明的重點,也是最為複雜的:

我們新建這樣的目錄結構,然後配置 nginx:

server 

}

此時我們可以訪問這 4 個 html 檔案測試:

這個時候我們做反向**:

#

**不帶專案名稱,沒有 /

server }#

**不帶專案名稱,但是有 /

server }#

**帶專案名稱,沒有 /

server }#

**帶專案名稱,但是有 /

server

}

此時我們訪問測試同一 uri 不同埠:

結論:在 proxy_pass 中,當我們不是 / 匹配而是帶有自定義專案名匹配的時候:

1. proxy_pass 後面帶 /,我們的自定義的專案名就不會被視作路徑的一部分去查詢後端。

2. proxy_pass 後面不帶 /,我們自定義的專案名會當成路徑的一部分新增到**後端的查詢中。

當我們在 proxy_pass **的導致中還包含專案名稱的時候:

1. 當後面還跟了專案名,我們自定義的匹配專案名就都不會再作為請求的一部分去查詢後端。

2. 當後面的專案名不帶 / 的時候,除去我們自定義部分,後面的 uri 會直接拼接到我們 proxy_pass 上面,由於他們之間沒有 / 分隔,所以會組成乙個新的路徑去查後端。

3. 當後面的專案帶 / 的時候,則會在拼接的時候相當於多了個 / 的分隔。

小結這個 / 就很小的乙個符號,但是可能造成我們配置的東西完全不符合我們的需求,特別是第三個 proxy_pass 的。

10 Nginx負載均衡

請求分發詳解 配置負載均衡伺服器集群 upstream backend對特定請求進行分發 server nginx負載均衡在分發請求的時候,缺省會採用輪詢的方式。即 請求順序 請求分發 第一次訪問 x.x.x.x 1023 第二次訪問 x.x.x.x 1024 第三次訪問 x.x.x.x 1025 ...

《一起學》系列10 Nginx入門

nginx採用了高度模組化的設計,這些模組的介面非常簡單靈活,具有良好的擴充套件性和可重用性。官方nginx共有五大型別的模組 核心模組 配置模組 事件模組 http模組 mail模組。nginx採用完全的事件驅動架構來處理業務,這與傳統的web伺服器 如apache 是不同的。傳統web伺服器中,...

10 nginx 統計模組安裝使用和優化

一 nginx統計模組stub status安裝與使用 1 編譯安裝 nginx的http stub status module監控其執行狀態 2 檢視是否安裝好 3 修改 nginx 配置檔案 開啟stub status統計模組 location nginx status 4 訪問結果 引數說明 ...