本文為您解讀,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_server
的server_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/www
,fastcgi_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...