nginx的主配置文件是nginx.conf,這裏主要針對這個文件進行說明php
1.主配置文件nginx.conf
從上面的配置文件中咱們能夠總結出nginx配置文件的基本結構
2.1 全局塊
全局塊是默認配置文件從開始到events之間的內容,主要設置一些影響nginx服務器運行的配置命令,做用域是nginx服務器全局,一般包括nginx的用戶和組,容許生成的work process數,nginx進程pid文件,日誌的路徑和類型、配置文件引入等
2.2 events塊
設計的明日您主要影響nginx服務器與用的的網絡鏈接。經常使用的設置包括是否開啓對多worker process下的網絡鏈接進行序列化,是否容許同時接收多個網絡鏈接,選取那種事件驅動模型處理鏈接請求,每一個worker process同時支持的最大鏈接數。
這一部分的指令對於nginx的性能影響較大,在實際陰影中須要根據實際狀況靈活配置。
2.3 http塊
這是nginx配置中的重要部分,代理、緩存和日誌等絕大多數功能和第三方模塊的配置均可以放在這個模塊中。http包含全局塊和下面的server塊、location塊。
http全局塊中配置的命令包括文件引入、MIME-Type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間、單鏈接強求數上限等。
2.4 server塊
server塊配置和「虛擬主機」有密切聯繫。
注意:在http全局塊中介紹的部分指令能夠再server塊中和location塊中使用,只是做用域不一樣。
在server塊中,最多見的兩個配置項就是本虛擬主機的監聽配置和本虛擬主機的名稱或IP配置。
2.5 location塊
每一個server中能夠包含多個location塊,location塊的做用體如今實現nginx功能的靈活運用
它的主要做用是,基於nginx服務器接收到的請求字符串,對除虛擬主機名稱以外的字符串進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能都是在這部分實現的。許多第三方模塊的配置也是在這個塊中提供功能。
3.全局配置
3.1 容許生成的worker process數
worker process是nginx服務器處理高併發的關鍵,理論上說,它的值越大,能夠值得併發處理量也就越多,但實際上仍是要受到軟件自己、操做系統資源、硬件等的限制。
配置格式:
number:制定能夠生成的worker process數
auto:讓nginx自動檢測
默認的配置文件中,number=1
若是將number改成3
改成auto
3.2 pid文件存放路徑
這個通常在進行編譯安裝的時候會進行指定,固然你也能夠在配置文件中從新指定
配置格式:
file是指定的pid文件路徑,默認狀況下是在/var/run/nginx/nginx.pid
注意:文件路徑在這裏可使用相對路徑,可是必須包含文件名。
此指令只能在全局塊中進行配置
3.3 錯誤日誌文件路徑
這個配置能夠在全局塊、http、server中使用,只是做用域不一樣。
配置格式:
nginx服務器的日誌支持輸出到某一固定的文件file或者輸出到標準錯誤輸出stderr;日誌級別可選,由高到低分爲debug(須要在編譯安裝時配置--with-debug)、info、notice、warn、error、crit、alert、emerg等。
配置實例:
注意:nginx用戶必定要對指定的文件擁有讀寫權限,不然nginx -t會報錯。
3.4 引入其餘配置文件
咱們可能會引入其餘的nginx配置或第三方模塊的配置引用到當前的主配置中。
配置格式:
file支持相對路徑,此指令能夠放在配置文件的任意地方。
4.events配置塊
4.1 網絡鏈接序列化問題
網絡鏈接中有一個「驚羣」的問題,意思是,當某一時刻只有一個網絡鏈接的時候,多個睡眠的進程會被同時喚醒,可是隻有一個進程能夠得到鏈接。若是每次喚醒的進程數目太多,會影響一部分系統性能。在nginx多進程的狀況下,可能會出現這種問題。爲了解決這個問題,nginx配置中包含了這樣一條指令---accept_mutex,當其設置爲開啓的時候,將會對多個nginx進程接受鏈接進行序列化,防止多個進程之間的爭搶。
配置格式:
4.2 是否容許同時接受多個網絡鏈接
每一個nginx的worker process多有同時接受多個新到達的網絡鏈接,可是要在配置文件中進行配置。
配置格式:
此指令默認爲關閉狀態,
只能在events中進行配置。
4.3 事件驅動模型的選擇
nginx支持多種事件驅動模型來處理網絡請求,包括select、poll、kqueue、epoll、rtsing、/dev/poll和eventport
配置格式:
method爲使用的驅動模型,
只能在events中進行配置。
4.4 最大鏈接數
worker_connections主要用來設置容許每一個worker process同時開啓的最大鏈接數。
配置格式:
這裏的number不只僅包括和前端用戶創建的鏈接數,而是包括全部可能的鏈接數。另外,numbers值不能大於錯作系統支持大開的最大句柄數。只能在events中配置。
5.http配置段
5.1 定義MIME-Type
在經常使用的瀏覽器中,能夠顯示的內容喲HTML、XML、GIF及Flash等文本媒體類型,瀏覽器爲區分這些資源,須要使用MIME Tyep。Nginx做爲web服務器,必須能識別前端請求的資源類型。
在nginx的默認配置中,能夠看到以下內容:
此指令能夠在http/server/location中進行配置。
5.2 自定義訪問日誌
access_log記錄nginx服務器提供服務過程應答前端請求的日誌,支持對服務日誌的格式、大小、輸出等進行設置,須要使用兩個指令,分別是access_log和log_format指令
access_log配置格式:
format:可選項,自定義服務日誌的格式字符串,也能夠經過「格式串的名稱」使用log_format指令定義好的格式,「格式串的名稱」在log_format中定義。
size:配置臨時存放日誌的內存緩衝區大小
此指令能夠在http/server/location塊中進行設置。默認的配置以下:
其中,main是log_format指令默認定義的日誌格式字符串的名稱。
若是要取消記錄服務日誌的功能:
log_format是專門用於定義日誌格式,而且能夠爲格式字符串定義一個名字,以便於access_log指令能夠直接調用
配置格式:
string:服務日誌的格式字符串,相關變量及含義能夠參考官網文檔
示例:
$time_local:服務器的時間
$request:獲取到請求爲GET
$status:請求狀態,200表示請求成功
$body_bytes_sent:獲取到請求體的大小爲1334B
$http_referer:http://192.168.61.130/index.php,請求的內容
$http_user_agent:獲取到用戶使用的是windows平臺的瀏覽器(內核)類型
注意:此指令只能在http中配置
5.3 配置容許sendfile方式傳輸文件
在Linux kernel2.2版本以後出現了一種叫作「零拷貝(zero-copy)」系統調用機制,目前不少應用服務器如apache、samba、nginx都支持sendfile。nginx在支持了sendfile系統調用後,避免了內核層與用戶層的上線文切換(content swith)工做,大大減小了系統性能的開銷。sendfile相關指令:sendfile和sendfile_max_chunk。
sendfile配置:
用於控制sendfile功能的開關,默認關閉。能夠在http/server/location中配置。
sendfile_max_chunk配置:
其中,size值若是大於0,nginx進程的每一個worker process每次調用sendfile()傳輸的數據量最大不能超過這個值,若是設置爲0,則無限。默認設置爲0。能夠在
http/server/location中配置。
示例:
與用戶創建會話以後,nginx能夠保持這些連接打開一段時間,指令keepalived_timeout就是用來設置此時間的
配置格式:
timeout:服務器端對鏈接的保持時間。默認爲65。
header_timeout:可選項,在應答報文頭部的Keep-Alive域設置超時時間:「Kepp-Alive:timeout=header_timeout
」。報文中的這個指令能夠被Mozilla和Konqueror識別。
能夠配置在server、location中
示例:
其含義是,在服務器端保持鏈接的時間設置爲120s,發給用戶端的應答報文頭部中Kepp-Alive域的超時時間爲100s。
能夠配置在
http/server/location中。
5.5 單鏈接請求上限數
nginx服務器端和用戶端創建會話鏈接後,用戶端經過此鏈接發送請求,指令keepalive_requests用於限制用戶經過某一鏈接線nginx發送請求的次數。
配置格式以下:
默認值爲100,能夠在server和location中。
5.6 配置監聽
配置監聽使用listen指令,經常使用的有兩種配置方法
第一種:配置監聽的ip地址
address:監聽的IP地址,若是是IPV6地址,須要用中括號「[]」括起來。
port:端口號,若是隻是定義了IP地址,沒有定義端口號,就使用80端口
default_server:標識符,將此虛擬主機設置爲address:port的默認主機。
setfib=number:老版本使用,現不經常使用
backlog=number:設置監聽函數listen()最多容許多少網絡鏈接同時處於掛機狀態,在FreeBSD中默認爲-1,其餘平臺爲511
rcvbuf=size:設置監聽socket接收緩存區大小
sndbuf=size:設置監聽socket發送緩存區大小
deferred:標識符,將accept()設置爲Deferred模式
accept_filter=filter:設置監聽端口對請求的過濾,被過濾的內容不能被接受和處理。這個功能只在FreeBSD和NetBSD中可用。
bind:標識符,使用獨立的bind()處理此address:port
ssl:標識符,設置會話鏈接使用SSL模式運行,與HTTPS服務有關。
示例:
location的配置語法:
其中,uri變量是待匹配的請求字符串,可使不放正則表達式的字符串,如index.php等;也能夠是包含正則的字符串,如\.php$(表示以.php結尾的URL)等。
其中,方括號中的內容是可選項,用來改變請求字符串與uri的匹配方式。在不添加此選項時,nginx服務器首先在server塊的多個location塊中搜索是否有標準uri字符串匹配,若是有多個能夠匹配,就記錄匹配度最高的一個。而後,服務器在用location塊中的正則uri和請求字符串匹配,當第一個正則uri匹配成功,結束搜索,並使用這個location塊處理請求;若是正則匹配所有失敗,就是用剛纔記錄的匹配度最高的location塊處理此請求。
下面是各個標識符的含義:
「=」:用於標準uri前,要求請求字符串與uri嚴格匹配。若是已經匹配成功,就中止繼續向下搜索並當即處理此請求。
「~」:用於表示uri包含正則表達式,而且區分大小寫
「~*」:用於表示uri包含正則表達式,而且不區分大小寫
「~^」:用於標準uri以前,要求nginx服務器找到標識uri和請求字符串匹配度最高的location後,當即使用此location處理請求,而再也不使用location塊中的正則uri和請求字符串作匹配。
6.1 配置請求的根目錄root
web服務器接收到請求以後,首先要在服務器端指定目錄中尋找請求資源。在nginx服務器中,指令root就是用來配置這個根目錄的,配置結構以下:
表示當location塊接收到/zabbix的請求時,將會在/var/lib/zabbix目錄下尋找index.php響應請求。
能夠在http/server/location中配置,通常在location中。
6.2 更改location的uri
在location塊中,除了使用root指令指明請求處理根目錄,還可使用alias指令改變location接收到的URI的請求路徑,其語法結構以下:
示例:
當此location塊接收到「/data/index.htm」請求時,匹配成功,以後根據alias指令的配置,nginx服務器將到/location1/test/other目錄下找到index.htm並相應請求。能夠看到,經過alias指令的配置,根路徑已經從/data更改成/location1/other了。
6.3 設置網站的默認首頁index
指令index用於設置網站的默認首頁,它通常由兩個做用:1.用戶在發出請求訪問網站時,請求地址能夠不寫首頁名稱;2.能夠對一個請求,根據其請求內容而設置不一樣的首頁。
配置結構:
其中file變量能夠包含多個文件名,其間使用空格分隔,也能夠包含其餘變量。此變量默認爲indx.html。
示例:
當location塊接收到「/data/location/web」時,匹配成功,他首先將預置變量$1置爲「locationtest」,而後在/data/locationtest/web路徑下按照index的配置順序依次尋找index.locationtest.html頁,index.my1.html頁,和index.html頁,首先找到那個頁面,就使用哪一個頁面響應請求。
6.4 設置錯誤頁面
若是用戶端嘗試查看網頁時出現錯誤,服務器會將HTTP錯誤從網站發送到web瀏覽器。若是沒法顯示網頁,web瀏覽器會顯示網站發送的實際錯誤網頁或web瀏覽器內置的友好錯誤消息。nginx支持自定義錯誤頁面的內容。能夠經過這一功能,在網站發生錯誤時爲用戶提供人性化錯誤界面顯示。
通常來講,HTTP 2XX表示請求正常,HTTP 3XX表示網站重定向,HTTP 4XX表示客戶端出現錯誤,HTTP 5XX表明服務器端出現錯誤。
配置格式:
response:可選項,將code指定的錯誤代碼轉化爲新的response。
uri:錯誤頁面的路徑或者網站地址。
示例:
在上面的是李總能夠看到,變量uri其實是一個相對與nginx服務器安裝路徑的相對路徑。若是不想將錯誤頁面放到nginx服務器的安裝路徑下管理,只須要另外使用一個location塊定向錯誤頁面到新的路徑下便可。
error_page指令能夠在http、server、location中使用。
7.認證功能配置
7.1 基於IP配置nginx的訪問權限
nignx配置經過兩種途徑支持基本訪問權限的控制,其中一種是由HTTP標準模塊ngx_http_access_module支持的,其經過IP來判斷是否擁有對nginx的訪問權限。
allow指令,用於設置容許訪問nginx的客戶端IP,配置結構以下:
address:容許訪問的客戶端IP,不支持同時設置多個,若是有多個IP須要設置,須要重複使用allow指令。
CIDR:容許訪問的客戶端的CIDR地址,例如202.80.18.23/25,前面是32位IP地址,後面「/25」表明該IP地址中前25位是網絡部分,其他位表明主機部分。
all:表明容許全部客戶端訪問
另外一個是deny指令,用於設置禁止訪問nginx的客戶端地址,配置結構:
首先禁止192.168.1.1訪問,而後容許192.168.0.1/24網段訪問,而後是禁止其餘全部的ip訪問,匹配順序是從上向下。
7.2 基於密碼配置nginx的訪問權限
nginx還支持基於http basic authentication協議的認證。須要識別用戶名和密碼,認證失敗的客戶端沒有訪問權限,該功能由http標準模塊ngx_http_auth_basic_module支持。
auth_basic指令,用於開關認證功能。
string:開啓該認證功能,並配置驗證時的指示信息。
off:關閉認證功能。
auth_basic_user_file,用於設置包含用戶名和密碼信息的文件路徑,配置結構以下:
這裏的密碼文件支持明文和密碼加密後的文件,明文格式以下:
加密密碼可使用crypt()函數進行密碼加密的格式,在linux上可使用htpasswd命令生成,在PHP和perl中,也提供crypt()函數。
示例:
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">html