nginx教程 nginx如何處理乙個請求

2021-08-08 13:55:21 字數 1804 閱讀 7545

nginx首先決定那個服務應該吹來請求。讓我們以乙個簡單的配置開始,在這個配置中所有3個虛擬服務都監聽80埠:

server 

server

server

在這個配置中nginx只測試請求頭欄位「host」來決定請求應該路由到那個服務。如果它的值不匹配任何服務名稱,請求根本不包含這些頭欄位,nginx將會路由請求到這個埠的預設服務。在上面的配置中,預設服務是第乙個 -- 它是nginx的標準預設行為。也可以明確的設定那個服務應該是預設的,在listen指令中使用default_server引數:

server

default_server從0.8.21版本開始就是可用的。在早期的版本應該使用default引數代替。

注意,預設服務是監聽埠的屬性而不是服務名稱的。稍後討論更多。

如果沒有「host」頭字段的請求應該不被允許的,乙個扔掉這個請求的服務可以這樣定義:

server

這裡,服務名稱被設定為空字串,它將匹配沒有「host」頭字段的請求,並且乙個特殊的nginx非標準**444將會返回並關閉連線。

自從0.8.48版本後,這是服務名稱的預設設定,所以server_name ""可以省略。在早期的版本,機器的hostname被用於作為乙個預設的服務名稱。

server 

server

server

在這個配置中,nginx首先測試server塊中listen指令中的ip位址和埠。然後匹配id位址和埠的server塊的server_name入口的「host」頭字段的請求。如果沒有找到服務名稱,請求將會被預設的服務處理。例如在192.168.1.1:80埠上www.example.com接收到的請求將會被192.168.1.1:80埠的預設服務處理,也就是說,被第乙個服務,因為這裡沒有www.example.com定義了這個埠。

正如已經陳述的,乙個預設服務是監聽埠的屬性,並且不同的預設服務也能定義不同的埠:

server 

server

server

現在讓我們來看看nginx如何選擇乙個location來處理來自乙個典型的,簡單的php站點的請求:

nginx首先搜尋文字字串給定的最特殊的字首location而不管列出的順序。在上面的配置中,唯一的字首location是「/」並且因為它匹配任何請求所以它被用作最後的手段。然後,nginx按配置檔案中列出的順序檢查正規表示式給定的location。第乙個匹配的表示式停止搜尋並且nginx將會使用這個location。如果沒有正規表示式匹配乙個請求,nginx使用之前找到的最特殊的字首location。

注意,所有型別的location只檢測不帶引數的請求行的uri部分。這是因為在查詢字串中的引數可以以幾種方式給出,例如:

/index.php?user=john&page=1

/index.php?page=1&user=john

除此之外,任何人可以在查詢字串中請求任何事:

/index.php?page=1&something+else&user=john

現在讓我們看看在上述的配置中請求將會如何被處理:

Nginx是如何處理請求的

基於命名的虛擬伺服器 name based virtual servers nginx首先要確定由哪個伺服器 server 來處理這個請求,如下面的簡單的例子中,一共有3個虛擬主機,分別是 server 其中 是區分大小寫的正規表示式 為不區分大小寫的正規表示式 為了提高效率,實行嚴格匹配,如果找到...

nginx是如何處理請求的

一 nginx如何選擇適當的虛擬伺服器來處理請求?server匹配 1 基於主機名匹配來選擇合適的虛擬伺服器 對比請求頭中的host欄位與server中的server name,選擇匹配的伺服器。如果都不匹配,則選擇該埠所對應預設的伺服器。如果沒有指定預設伺服器,默默為伺服器列表中的第乙個,可以通過...

Nginx是如何處理Request的?

nginx是如何匹配過來的請求,然後做處理的呢?這個匹配的過程可以分為兩步 1.選擇server 2.選擇location 選擇server 僅僅匹配server name 加入nginx的配置檔案有這麼幾項 server server server 在上面配置檔案中,nginx僅僅匹配server...