天天看點

《深入了解Nginx:子產品開發與架構解析》一2.2 Nginx配置的通用文法

nginx的配置檔案其實是一個普通的文本檔案。下面來看一個簡單的例子。

在這段簡短的配置代碼中,每一行配置項的文法格式都将在2.2.2節介紹,出現的events和http塊配置項将在2.2.1節介紹,以#符号開頭的注釋将在2.2.3節介紹,類似“buffer=32k”這樣的配置項的機關将在2.2.4節介紹。

塊配置項由一個塊配置項名和一對大括号組成。具體示例如下:

上面代碼段中的events、http、server、location、upstream等都是塊配置項,塊配置項之後是否如“location /webstatic {...}”那樣在後面加上參數,取決于解析這個塊配置項的子產品,不能一概而論,但塊配置項一定會用大括号把一系列所屬的配置項全包含進來,表示大括号内的配置項同時生效。所有的事件類配置都要在events塊中,http、server等配置也遵循這個規定。

塊配置項可以嵌套。内層塊直接繼承外層塊,例如,上例中,server塊裡的任意配置都是基于http塊裡的已有配置的。當内外層塊中的配置發生沖突時,究竟是以内層塊還是外層塊的配置為準,取決于解析這個配置項的子產品,第4章将會介紹http塊内配置項沖突的處理方法。例如,上例在http子產品中已經打開了“gzip on;”,但其下的location/webstatic又把gzip關閉了:gzip off;,最終,在/webstatic的處理子產品中,gzip子產品是按照gzip off來處理請求的。

從上文的示例可以看出,最基本的配置項文法格式如下:

配置項名 配置項值1 配置項值2 … ;

下面解釋一下配置項的構成部分。

首先,在行首的是配置項名,這些配置項名必須是nginx的某一個子產品想要處理的,否則nginx會認為配置檔案出現了非法的配置項名。配置項名輸入結束後,将以空格作為分隔符。

其次是配置項值,它可以是數字或字元串(當然也包括正規表達式)。針對一個配置項,既可以隻有一個值,也可以包含多個值,配置項值之間仍然由空格符來分隔。當然,一個配置項對應的值究竟有多少個,取決于解析這個配置項的子產品。我們必須根據某個nginx 子產品對一個配置項的約定來更改配置項,第4章将會介紹子產品是如何約定一個配置項的格式。

最後,每行配置的結尾需要加上分号。

注意 如果配置項值中包括文法符号,比如空格符,那麼需要使用單引号或雙引号包覆配置項值,否則nginx會報文法錯誤。例如:

如果有一個配置項暫時需要注釋掉,那麼可以加“#”注釋掉這一行配置。例如:

大部分子產品遵循一些通用的規定,如指定空間大小時不用每次都定義到位元組、指定時間時不用精确到毫秒。

當指定空間大小時,可以使用的機關包括:

k或者k千位元組(kilobyte,kb)。

m或者m兆位元組(megabyte,mb)。

例如:

當指定時間時,可以使用的機關包括:

ms(毫秒),s(秒),m(分鐘),h(小時),d(天),w(周,包含7天),m(月,包含30天),y(年,包含365天)。

注意 配置項後的值究竟是否可以使用這些機關,取決于解析該配置項的子產品。如果這個子產品使用了nginx架構提供的相應解析配置項方法,那麼配置項值才可以攜帶機關。第4章中較長的描述了nginx架構提供的14種預設解析方法,其中一些方法将可以解析以上列出的機關。

有些子產品允許在配置項中使用變量,如在日志記錄部分,具體示例如下。

l<code>`</code>javascript

og_format main '$remote_addr - $remote_user [$time_local] "$request" '

繼續閱讀