Nginx 的配置指令

2022-02-20 20:53:10 字數 3450 閱讀 8585

我們已經了解了 nginx 的基本命令和架構原理,下面該到最讓人頭疼也是最不容易理解的部分了,那就是 nginx.conf 這個配置檔案,下面從 nginx 的指令開始,一步步來講解 nginx 的配置。

先來看乙個典型的 nginx 配置檔案示例。

}從上面可以看到,這個配置檔案中包含了多個指令塊,有些指令塊還是重複的,那麼這在 nginx 中是乙個什麼樣的規則?接下來會慢慢介紹。

在 nginx 配置檔案中,指令塊是可以互相巢狀的,例如上面的示例,http 塊中可以包含多個 server 塊,server 塊中還會包含多個 location 塊,每乙個塊中都有相應的指令。

而每乙個指令都有 context 上下文,也就是生效的環境,這在 nginx 的官方文件中說的很清楚,例如下面的兩條指令,context 中都表明了各自可以生效的環境,access_log 指令可以在多個上下文中生效:

在 nginx 中,指令分為兩種,一種是值指令,一種是動作類指令:

動作類指令:指定行為動作,往往表示接下來要做一件事情

生效階段

這裡面的示例以及生效階段,後面都還會詳細講,這裡可以不用過多關注,既然指令分為兩種,那麼就有不同的繼承規則,下面就來說一下。

例如下面的配置檔案,這裡面在 server 塊和 location 塊中都配置了 root 指令,nginx 的繼承規則如下:

server 

location /dlib

location /

根據上面這兩條規則,第乙個 location 使用自家的 root 指令,後面兩個 location 則使用 server 塊的 root 指令。這和程式語言中變數的作用域也是類似的,作用域更小的變數優先順序往往更高,nginx 的指令也是一樣。

對於很多第三方模組,很可能文件並不完善,這時候需要通過原始碼來檢視指令的生效範圍。需要明確下面幾個問題:

指令在哪個塊下生效?

指令允許出現在哪些塊下?

這兩個問題是在原始碼中定義的,例如:

從上面第三行可以看到,variables_hash_max_size指令是在 main 塊下生效的。

還會有兩個**方法:

向 location 合併

例如:

static ngx_http_module_t  ngx_http_core_module_ctx = ;
ngx_http_module_t這個結構體裡面,定義了很多**方法,最後乙個ngx_http_core_merge_loc_conf方法,就是制定合併規則的。這個方法定義了兩個引數,乙個是父配置,乙個是子配置:

這個方法表明了從父配置向子配置合併。

listen 指令在 server 塊中生效,用來配置監聽哪些埠,由這些埠來處理請求。listen 指令的配置如下:

如示例所示,listen 指令可以監聽的型別有多種,可以配置監聽位址和埠,也可以是僅位址和僅埠,還可以僅監聽 ipv6 等等。

乙個指令:server_name

server_name 指令是用來配置究竟是哪個 server 來處理我們的請求的。有時候,乙個 server_name 中可能會有多個網域名稱,這時候是如何選擇的呢?

server_name 指令後可以跟多個網域名稱,第乙個是主網域名稱,多個網域名稱之間空格分隔

泛網域名稱:僅支援在最前或最後加 *,例如:server_name *.taohui.tech

正規表示式匹配:server_name www.taohui.tech ~^www\d+\.taohui\.tech$;

當 server_name 指令後有多個網域名稱時,會有乙個 server_name_in_redirect 的配置,這個配置預設關閉,它使用來控制網域名稱重定向的,也就是這個配置開啟之後,請求過來會重定向到主網域名稱訪問。

還可以用正規表示式建立變數

特殊的配置規則

精確匹配(與順序無關)

* 在前的泛網域名稱(與順序無關)

* 在後的泛網域名稱(與順序無關)

按檔案中的順序匹配正規表示式網域名稱

default server

這裡面 default server 有兩種指定方式,假如沒有配置 default server,那麼第乙個 server 塊就會成為 default server,如果 listen 中配置了 default,那麼就會由配置的塊進行處理。

Nginx配置指令(四)

31.limit except 語法 limit except 方法名 預設值 no 功能 用於限制訪問location的http方法 用於location模組內 例如 limit except get 預設值 no 功能 改指令允許根據uri的需要進行配置訪問。可以根據字面字串配置也可以使用正規表...

Nginx配置指令(五)

41.open file cache errors 語法 open file cache errors on off 預設 open file cache errors off 功能 開啟或禁用快取檔案錯誤。用於http,server,location模組 42.open file cache mi...

nginx的rewrite功能配置指令

實現url的重寫 使用ngx http rewrite module模組處理和解析rewrite功能的相關配置 規則核心pcre 語法結構 if condition 支援以下幾種語法 if var if request method post if http user agent msie 用於中斷...