Nginx的配置與部署(3)Nginx請求處理機制

2021-06-26 13:12:18 字數 2878 閱讀 1367

本文為您解讀,nginx是如何處理請求的,讓你從邏輯上有乙個清晰的認識。

處理訪問到 nginx 所在 ip 位址的請求,並且這些請求的 http 頭資訊中的 host 為所要處理的網域名稱(如下以80埠為例),如下幾個 server 就對應響應的請求:

server 

server

server

如果不主動設定預設server,那麼第乙個server就會被當做預設server。若要主動設定,應該如下配置:

server
此項的版本注意事項:

另外注意,default_server是埠的乙個屬性,不是server_name的乙個屬性。

比如,如果不想處理 http 請求中沒有 host 欄位的頭資訊的情況,那麼可以如下:

server
此項的版本注意事項:

請先看如下配置:

server 

server

server

這個應該很好理解,如果listen的 ip 位址和埠號都吻合了,就看 http 請求中的 host 頭資訊與某個server_name中的 name 是否吻合。如果server_name不吻合,就到該埠對應的default_server那裡處理請求,如果default_serverserver_name也沒有與 host 頭資訊吻合,那麼就放棄該請求。

特別再次強調,default_server是埠的屬性,而非server_name的屬性。所以可以有如下配置:

}nginx 在匹配location的時候,不是按照配置**給出的順序進行匹配的,而是先按照匹配表示式中的文字字串(literal string)的明確程度,從最明確的開始匹配。這麼說可能有點含混不清,簡單說,沒有正則規則的匹配表示式,是最明確的。比如如果這個匹配表示式就是乙個「/」或者「/abc」,那麼這就是最明確的。上例中的"/"就是這個最明確的蚊子字串(the most specific literal string),其實也是該例中唯一的。所以先從這個location開始,然後再按照location的列出順序,依次匹配,直到出現第乙個匹配的location後停止。如果所有的location都不匹配,就用第乙個找到的最明確的文字字串來匹配(the most specific literal string)。

nginx只處理無查詢的http請求,因為查詢請求的查詢欄位的順序不確定,比如:

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

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

再比如:

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

/logo.gif
「/」先被找到,然後匹配"\.(gif|jpg|png)$",再根據 redirective 找到root/data/www,然後這個請求就被對映到"/data/www/logo.gif"了,最後檔案就被傳送給到了客戶端。

例2:

/index.php
"/"先被找到,然後匹配"\.(php)$",然後 request 就被傳遞給在 9000 埠上監聽的 fastcgi 伺服器,"fastcgi_param"directive 設定 fastcgi 的引數script_filename"/data/www/index.php",然後fastcgi伺服器就執行這個檔案。(注意其中document_root/data/wwwfastcgi_script_name/index.php。)

例3:

/about.html
"/"先被找到,且只有這乙個匹配的。然後根據root/data/www,就找到了檔案/data/www/about.html,然後傳送給客戶端。

例4:

/
"/"是很複雜的,先找到"/"這個location,然後根據root/data/www,看/data/www/index.php是否存在,如果存在 directive 就在內部重定向到/index.php,然後 nginx 根據這個再次搜尋location,重複上面第二個例子。 -

nginx部署與小程式配置

sudo apt get update sudo apt get install nginx檢視 mkdir opt cert把證書上傳到這個資料夾 在 etc nginx conf.d下增加乙個檔案default.conf 內容 server usr share nginx html 本地也注意將...

Nginx的安裝與部署

yum install y wget yum install y vim enhanced yum install y make cmake gcc gcc c wget 2.tar gzyum install y pcre pcre devel yum install y zlib zlib de...

Nginx的安裝與部署

1 安裝工具包 wget vim和gcc yum install y wget yum install y vim enhanced yum install y make cmake gcc gcc c wget3 安裝依賴包 yum install y pcre pcre devel yum in...