您好,登錄后才能下訂單哦!
這篇文章主要講解了“Nginx的基本屬性配置”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Nginx的基本屬性配置”吧!
是否以守護(hù)進(jìn)程的方式運(yùn)行nginx
# 默認(rèn)on daemon on|off;
是否以master/worker方式工作
# 默認(rèn)on,指定了是否以master-worker進(jìn)程的方式運(yùn)行,如果設(shè)置為off,那么所有的請(qǐng)求將只會(huì)由master進(jìn)程處理 master_process on|off;
error日志的設(shè)置
# 指定了error日志的目錄和日志級(jí)別,第二個(gè)參數(shù)用于指定目錄,第三個(gè)參數(shù)用于指定日志級(jí)別,總共有:debug、info、notice、warn、error、crit、alert、emerg,這些日志級(jí)別中,從左往右優(yōu)先級(jí)依次增大,默認(rèn)為info error_log logs/error.log error;
是否處理幾個(gè)特殊的調(diào)試點(diǎn)
# 指定了調(diào)試點(diǎn) debug_points stop|abort
僅對(duì)指定的客戶端輸出debug級(jí)別的日志
debug_connection IP|CIDR
該參數(shù)主要用于events模塊中,針對(duì)指定的ip或者網(wǎng)段記錄debug日志:
events { debug_connection 10.224.66.14; debug_connection 10.224.57.0/24; }
需要注意的是,在使用該參數(shù)時(shí),必須要確保在進(jìn)行configure時(shí)已經(jīng)加入了--with-debug
參數(shù),否則不會(huì)生效;
限制coredump核心轉(zhuǎn)儲(chǔ)文件的大小
worker_rlimit_core size;
在Linux操作系統(tǒng)中,如果一個(gè)進(jìn)程由于錯(cuò)誤或者收到信號(hào)而終止時(shí),會(huì)將進(jìn)程執(zhí)行時(shí)的內(nèi)存內(nèi)容寫(xiě)入一個(gè)文件(core文件),以作為調(diào)試之用,這就是所謂的核心轉(zhuǎn)儲(chǔ)。在nginx進(jìn)程宕機(jī)時(shí),其就會(huì)產(chǎn)生核心轉(zhuǎn)儲(chǔ)文件,而且該文件一般都有幾個(gè)G,因而如果不限制該文件的大小,那么很有可能會(huì)把服務(wù)器磁盤(pán)占滿。該參數(shù)的作用就是限制核心轉(zhuǎn)儲(chǔ)文件的大小的。
指定coredump文件生成目錄
working_directory path;
該參數(shù)指定了在生成核心轉(zhuǎn)儲(chǔ)文件時(shí),將該文件存放的目錄。
定義環(huán)境變量
env TESTPATH=/tmp/
這個(gè)配置項(xiàng)可以讓用戶直接設(shè)置操作系統(tǒng)上的環(huán)境變量。
嵌入其他配置文件
include /path/file
用于將其他的配置文件引入進(jìn)來(lái),該路徑可以是絕對(duì)路徑,也可以是相對(duì)路徑,如果是相對(duì)路徑,則是基于nginx的配置目錄而指定的。
pid文件的路徑
pid path/file
用于指定存儲(chǔ)nginx的master進(jìn)程運(yùn)行所使用的進(jìn)程id的文件的路徑。
Nginx的worker進(jìn)程運(yùn)行的用戶及用戶組
user username [groupName]
用于指定worker進(jìn)程運(yùn)行時(shí)所基于的用戶和用戶組,默認(rèn)都為nobody,這里如果不指定groupName,那么組名就與用戶名一致。
指定nginx的worker進(jìn)程可以打開(kāi)的最大句柄描述符個(gè)數(shù)
worker_rlimit_nofile limit;
設(shè)置一個(gè)worker進(jìn)程能夠打開(kāi)的最大句柄描述符個(gè)數(shù)。
限制信號(hào)隊(duì)列
worker_rlimit_sigpending limit;
設(shè)置了每個(gè)用戶能夠發(fā)往nginx的信號(hào)隊(duì)列的大小,如果信號(hào)隊(duì)列已滿,那么新發(fā)送的信號(hào)將會(huì)被丟棄。
nginx的worker進(jìn)程的個(gè)數(shù)
worker_processes 1;
用于指定nginx運(yùn)行時(shí)worker進(jìn)程的個(gè)數(shù),在nginx運(yùn)行時(shí),每個(gè)worker進(jìn)程都是單線程運(yùn)行的,這里需要判斷worker進(jìn)程是否進(jìn)行了阻塞性操作,如果有這樣的操作,那么稍微多配置一些worker進(jìn)程比較好,如果沒(méi)有,那么將worker進(jìn)程數(shù)量設(shè)置得與CPU數(shù)量一樣能夠得到更好的性能。
綁定nginx的worker進(jìn)程到指定的CPU內(nèi)核
worker_cpu_affinity cpumask [cpumask...]
將worker進(jìn)程與指定的CPU進(jìn)行綁定,這樣能夠防止多個(gè)worker進(jìn)程搶占同一個(gè)CPU,從而避免出現(xiàn)同步問(wèn)題。如下是一個(gè)4核CPU的配置方式:
worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001;
需要注意的是,worker_cpu_affinity
僅對(duì)于Linux系統(tǒng)有效。
SSL硬件加速
ssl_engine device;
如果服務(wù)器上有SSL硬件加速設(shè)備,那么就可以進(jìn)行配置以加快SSL協(xié)議的處理速度。用戶可以使用OpenSSL提供的命令來(lái)查看是否有SSL硬件加速設(shè)備:
openssl engine -t
系統(tǒng)調(diào)用gettimeofday的執(zhí)行頻率
timer_resolution -t
默認(rèn)情況下,每次內(nèi)核的事件調(diào)用返回時(shí),都會(huì)執(zhí)行一次gettimeofday,在早期的Linux版本中,獲取系統(tǒng)時(shí)間都會(huì)有一次從內(nèi)核態(tài)到用戶態(tài)的數(shù)據(jù)復(fù)制,其代價(jià)比較高,但是在最新的x86-64體系架構(gòu)中,gettimeofday僅僅只是一次vsyscall,其僅僅只是對(duì)共享內(nèi)存頁(yè)中的數(shù)據(jù)的訪問(wèn),代價(jià)不大。
nginx的worker進(jìn)程優(yōu)先級(jí)
worker_priority nice;
用于設(shè)置nginx的worker進(jìn)程的優(yōu)先級(jí),其中,nice的默認(rèn)值為0。在Linux操作系統(tǒng)中,當(dāng)有多個(gè)進(jìn)程在競(jìng)爭(zhēng)CPU執(zhí)行資源時(shí),其就會(huì)根據(jù)每個(gè)進(jìn)程設(shè)置的優(yōu)先級(jí)來(lái)優(yōu)先分配執(zhí)行權(quán)限,并且所分配的時(shí)間片也要高一些。優(yōu)先級(jí)的值在-20~+19
之間,數(shù)值越低優(yōu)先級(jí)越高,一般建議將nginx的優(yōu)先級(jí)設(shè)置得更低一些,這樣才能保證其執(zhí)行的權(quán)限,但是建議不要設(shè)置得比內(nèi)核的進(jìn)程優(yōu)先級(jí)(其值為-5)還要低。
是否打開(kāi)accept鎖
accept_mutex [on|off]
accept_mutex
參數(shù)用于控制是否啟用負(fù)載均衡鎖,其默認(rèn)值為on,該鎖會(huì)保證各個(gè)worker輪流的、序列化的與新客戶端建立連接,并且當(dāng)某個(gè)worker的連接數(shù)達(dá)到了worker_connections
配置的最大連接數(shù)的7/8時(shí),該鎖會(huì)降低該worker將要新建立的連接數(shù),從而保證各個(gè)worker的負(fù)載均衡。
lock文件的路徑
lock_file path/file;
該參數(shù)指定了lock文件的路徑。nginx會(huì)使用操作系統(tǒng)提供的鎖功能,但如果操作系統(tǒng)不支持原子鎖,此時(shí)才會(huì)使用文件鎖來(lái)實(shí)現(xiàn)lock。如果accept_mutex
參數(shù)設(shè)置為off,那么該參數(shù)將不會(huì)生效。
使用accept鎖后到真正建立連接之間的延遲時(shí)間
accept_mutex_delay Nms;
如果一個(gè)worker進(jìn)程嘗試獲取鎖失敗了,那么其就會(huì)等待該參數(shù)指定的時(shí)間段之后再次嘗試獲取鎖,該值默認(rèn)為500ms。
批量建立新連接
multi_accept [on|off];
當(dāng)事件模型通知此次有新的連接建立請(qǐng)求時(shí),盡可能的對(duì)本次調(diào)度中客戶端發(fā)起的的所有TCP請(qǐng)求都建立連接,該值默認(rèn)為off。
選擇事件模型
use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport];
nginx所選用的事件模型,其會(huì)自動(dòng)使用最適合的模型。在Linux操作系統(tǒng)下支持poll、select和epoll三種,其中epoll的性能是最高的。
每個(gè)worker的最大連接數(shù)
worker_connections number;
指定了每個(gè)worker進(jìn)程能夠建立的最大連接數(shù)。
listen address:port[default(deprecated)|default_server|[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|deferred|bind|ipv6only=[on|off]|ssl]]
這里的IP地址和端口號(hào)的配置非常靈活,如果不配置端口號(hào),則默認(rèn)為80端口,而ip地址則可以使用通配符進(jìn)行匹配,如:
listen 127.0.0.1:8080; listen *:8080;
listen的各個(gè)參數(shù)含義如下:
default
和default_server
:將當(dāng)前server塊作為整個(gè)web服務(wù)器的默認(rèn)server塊,如果沒(méi)有server設(shè)置了該參數(shù),則將nginx.conf中的第一個(gè)server塊作為默認(rèn)server塊。設(shè)置該參數(shù)的原因在于,如果當(dāng)前請(qǐng)求沒(méi)有匹配到任意一個(gè)server,那么就使用第一個(gè)server處理請(qǐng)求;
backlog=num
:指定了TCP中的backlog隊(duì)列的大小,默認(rèn)值為-1。在TCP的三次握手過(guò)程中,進(jìn)程此時(shí)還沒(méi)有開(kāi)始處理監(jiān)聽(tīng)句柄,而這些請(qǐng)求都會(huì)放在backlog隊(duì)列中,當(dāng)backlog隊(duì)列滿時(shí),客戶端新的握手請(qǐng)求就會(huì)被拒絕;
rcvbuf=size
:設(shè)置監(jiān)聽(tīng)句柄的SO_RCVBUF參數(shù);
sndbuf=size
:設(shè)置監(jiān)聽(tīng)句柄的SO_SNDBUF參數(shù);
accept_filter
:設(shè)置accept過(guò)濾器,只對(duì)FreeBSD操作系統(tǒng)有用;
deferred
:如果設(shè)置了該參數(shù),如果用戶發(fā)起了TCP連接請(qǐng)求,那么在三次握手成功之后內(nèi)核也不會(huì)調(diào)度相應(yīng)的進(jìn)程處理請(qǐng)求,而是在用戶真正的發(fā)送了數(shù)據(jù)包之后才會(huì)將請(qǐng)求發(fā)送給具體的進(jìn)程進(jìn)行處理;
bind
:綁定當(dāng)前端口/地址對(duì),如127.0.0.1:8000
,只有同時(shí)對(duì)一個(gè)端口監(jiān)聽(tīng)多個(gè)地址時(shí)才會(huì)生效;
ssl
:在當(dāng)前監(jiān)聽(tīng)的端口上建立的連接必須基于SSL協(xié)議;
語(yǔ)法:server_name name [...]; 默認(rèn):server_name ""; 配置塊:server
server_name
后可以跟多個(gè)主機(jī)名稱,在處理HTTP請(qǐng)求時(shí),其會(huì)將請(qǐng)求中的Host頭部的主機(jī)名與server塊中的主機(jī)名進(jìn)行匹配,如果遇到多個(gè)server塊中的主機(jī)名匹配,那么將會(huì)按照如下規(guī)則與其進(jìn)行匹配:
如果沒(méi)有找到能夠匹配的主機(jī)名,那么就會(huì)按照如下規(guī)則尋找server塊:
優(yōu)先選擇在listen項(xiàng)中加入了[default|default_server]的server塊;
找到匹配的listen端口的第一個(gè)server塊;
首先匹配主機(jī)名完全匹配的server塊;
然后匹配前綴使用通配符的server塊;
接著匹配后綴使用通配符的server塊;
最后匹配使用正則表達(dá)式的server塊;、
語(yǔ)法:server_names_hash_bucket_size size; 默認(rèn):server_names_hash_bucket_size 32|64|128; 配置塊:http、server、location
server_names_hash_bucket_size
的作用主要是進(jìn)行server name的hash匹配的,在進(jìn)行hash匹配時(shí),該參數(shù)指定了hash表的每個(gè)bucket占用的內(nèi)存大小。
語(yǔ)法:server_names_hash_max_size size; 默認(rèn):server_names_hash_max_size 512; 配置塊:http、server、location
server_names_hash_max_size
指定了進(jìn)行server name查找時(shí)使用的hash表的大小,該值越大,那么占用的內(nèi)存越多,但是查詢的效率也越高。
語(yǔ)法:server_name_in_redirect on|off; 默認(rèn):server_name_in_redirect on; 配置塊:http、server或者location
該配置需要配合server_name使用,在使用on打開(kāi)時(shí),表示在重定向請(qǐng)求時(shí),會(huì)使用server_name里配置的第一個(gè)主機(jī)名代替原來(lái)請(qǐng)求中的Host頭部,而使用off關(guān)閉時(shí),表示在重定向請(qǐng)求時(shí)使用請(qǐng)求本身的Host頭部。
語(yǔ)法:location [=|~|~*|^~|@] /uri/{...} 配置塊:server
location的主要作用是與請(qǐng)求中的URI進(jìn)行匹配,如果匹配了,就使用location塊中的配置來(lái)處理用戶請(qǐng)求。如下是location的匹配規(guī)則:
=
表示把URI作為字符串,以便于參數(shù)中的uri做完全匹配。例如:
location = / { # 只有當(dāng)用戶請(qǐng)求是/時(shí),才會(huì)使用該location下的配置 }
~
表示匹配URI時(shí)是字母大小寫(xiě)敏感的;
~*
表示匹配URI時(shí)是字母大小寫(xiě)不敏感的;
^~
表示匹配URI時(shí)只需要其前半部分與uri參數(shù)匹配即可。例如:
location ^~ /images/ { # 以/images/開(kāi)始的請(qǐng)求都會(huì)匹配上 }
@
表示僅用于nginx服務(wù)內(nèi)部請(qǐng)求之間的重定向,帶有@
的location不直接處理用戶請(qǐng)求;
可以在uir參數(shù)里使用正則表達(dá)式。如:
location ~* \.(gif|jpg|jpeg)$ { # 匹配以.gif、.jpg、.jpeg結(jié)尾的請(qǐng)求 }
關(guān)于location的匹配需要說(shuō)明的一點(diǎn)是,location的匹配是有順序的,當(dāng)一個(gè)請(qǐng)求匹配了多個(gè)location時(shí),實(shí)際上這個(gè)請(qǐng)求會(huì)被第一個(gè)location處理。
語(yǔ)法:root path; 默認(rèn):root html; 配置塊:http、server、locationo、if
示例如下:
location /download/ { root /opt/web/html/; }
這種配置方式會(huì)將/download/開(kāi)始的請(qǐng)求映射到/opt/web/html/目錄下,比如某個(gè)請(qǐng)求為/download/test/index.html,那么nginx就會(huì)到服務(wù)器上查找/opt/web/html/download/test/index.html文件。
語(yǔ)法:alias path; 配置塊:location;
與root
一樣,alias也是配置資源文件路徑的,但是alias是location后的路徑以別名的方式替換目標(biāo)路徑的指定部分,比如如下配置:
location /conf { alias /usr/local/nginx/conf; }
此時(shí)如果一個(gè)請(qǐng)求為/conf/index.html,那么其前綴/conf將會(huì)與當(dāng)前l(fā)ocation匹配,并且會(huì)將alias參數(shù)替換請(qǐng)求uri中匹配的部分,也就是轉(zhuǎn)換后的uri為/usr/local/nginx/conf/index.html。
語(yǔ)法:index file...; 默認(rèn):index index.html; 配置塊:http、server、location
該配置塊的主要作用是將用戶訪問(wèn)的某個(gè)地址映射到首頁(yè),在進(jìn)行首頁(yè)查找時(shí),會(huì)按照順序查詢index參數(shù)后的文件,如果存在,則將其返回,如果不存在,則繼續(xù)查找下一個(gè)。比如如下示例:
location / { root path; index /index.html /html/index.php /index.php }
當(dāng)接收到用戶的/
請(qǐng)求后,其首先會(huì)查詢/path/index.html
文件是否存在,如果不存在,則查詢下一個(gè)/path/html/index.php
是否存在,如果存在,則直接返回,依此類推。
語(yǔ)法:error_page code[code...][=|=answer-code]uri|@named_location 配置塊:http、server、location、if
該配置的主要作用是,如果當(dāng)前請(qǐng)求返回了指定的狀態(tài)碼,那么就將其重定向到后面的錯(cuò)誤頁(yè)面。如:
error_page 404 /404.html error_page 502 503 504 /50x.html error_page 403 http://example.com/forbidden.html error_page 404 = @fetch;
需要注意的是,即使重定向了URI,返回的HTTP狀態(tài)碼還是原來(lái)的狀態(tài)碼,如果需要修改狀態(tài)碼,可以使用=
來(lái)修改原來(lái)的狀態(tài)碼,如:
error_page 404 =200 /empty.gif; error_page 404 =403 /forbidden.gif;
也可以不指定修改后的狀態(tài)碼,而是由重定向后的請(qǐng)求決定其返回的狀態(tài)碼:
error_page 404 = /empty.gif;
在重定向后,也可以不修改URI,而是將這個(gè)請(qǐng)求重定向到另一個(gè)location中進(jìn)行處理,比如:
location / { error_page 404 @fallback; } location @fallback { proxy_pass http://backend; }
語(yǔ)法:recursive_error_pages [on|off]; 默認(rèn):recursive_error_pages off; 配置塊:http、server、location;
該配置主要用于控制是否支持遞歸的定義error_page。
語(yǔ)法:try_files path2[path3]uri; 配置塊:server、location
該參數(shù)的主要作用是在用戶請(qǐng)求到達(dá)之后,會(huì)依次嘗試其后指定的各個(gè)path路徑,如果匹配上了,那么就將該路徑的值直接返回。如果都沒(méi)有匹配上,那么就會(huì)使用最后的uri作為默認(rèn)處理路徑。示例如:
try_files /system/maintenance.html $uri $uri/index.html $uri.html @other location @other { proxy_pass http://backend; }
語(yǔ)法:client_body_in_file_only on|clean|off; 默認(rèn):client_body_in_file_only off; 配置塊:http、server、location
當(dāng)值配置為非off時(shí),用戶請(qǐng)求的http包體一律存儲(chǔ)到磁盤(pán)文件中,即使只有0字節(jié)也會(huì)存儲(chǔ)為文件。當(dāng)請(qǐng)求結(jié)束時(shí),如果配置為on,則這個(gè)文件不會(huì)被刪除,如果配置為clean,則會(huì)刪除該文件。
語(yǔ)法:client_body_in_single_buffer on|off; 默認(rèn):client_body_in_single_buffer off; 配置塊:http、server、location
用戶請(qǐng)求的http包體一律存儲(chǔ)到內(nèi)存buffer中,如果存儲(chǔ)的包體大小超過(guò)了client_body_buffer_size
指定的大小,那么該請(qǐng)求還是會(huì)存儲(chǔ)到磁盤(pán)文件中。
語(yǔ)法:client_header_buffer_size size; 默認(rèn):client_header_buffer_size 1k; 配置塊:http、server
該參數(shù)指定了用戶請(qǐng)求的http頭部的size大小,如果請(qǐng)求頭部大小超過(guò)了該數(shù)值,那么就會(huì)將請(qǐng)求就會(huì)交由large_client_header_buffers
參數(shù)定義的buffer處理。
語(yǔ)法:large_client_header_buffers number size; 默認(rèn):large_client_header_buffers 48k; 配置塊:http、server
該參數(shù)主要是在用戶的請(qǐng)求頭部信息超過(guò)了client_header_buffer_size
所能存儲(chǔ)的大小時(shí)使用,該參數(shù)定義了每個(gè)header所能傳輸?shù)臄?shù)據(jù)的大小,以及最多能夠傳輸多少個(gè)header。如果單個(gè)header大小超限,則會(huì)返回414(Request URI too large)狀態(tài)碼,如果是header個(gè)數(shù)超限,則會(huì)返回400(Bad Request)狀態(tài)碼。
語(yǔ)法:client_body_buffer_size size; 默認(rèn):client_body_buffer_size 8k/16k; 配置塊:http、server、location
該參數(shù)指定了nginx接收用戶http請(qǐng)求的包體buffer的大小,如果超過(guò)了該大小,那個(gè)請(qǐng)求包體將會(huì)存儲(chǔ)到磁盤(pán)文件中。
需要注意的是,如果用戶請(qǐng)求的header中包含Content-Length
,并且其標(biāo)識(shí)的長(zhǎng)度小于上述參數(shù)指定的長(zhǎng)度,那么就會(huì)自動(dòng)降低此次請(qǐng)求所使用的buffer大小。
語(yǔ)法:client_body_temp_path dir-path[level1[level2[level3]]] 默認(rèn):client_body_temp_path client_body_temp; 配置塊:http、server、location
該參數(shù)的主要作用是指定了存儲(chǔ)http包體的磁盤(pán)目錄,后面的level表示可以有幾級(jí)子目錄,這是因?yàn)槿绻?qǐng)求比較多,那么生成的文件就會(huì)比較多,頻繁的訪問(wèn)同一個(gè)目錄可能會(huì)降低性能,因而可以設(shè)置多級(jí)子目錄用于文件的存放;
需要注意的是,上述level參數(shù)表示的是所生成的目錄名占有目標(biāo)文件名字符的個(gè)數(shù),比如生成的目標(biāo)文件名為00000123456
,而上述參數(shù)按如下配置:
client_body_temp_path /opt/nginx/client_temp 1 2;
那么nginx就會(huì)截取目標(biāo)文件名的最后1個(gè)字符作為一級(jí)目錄,倒數(shù)第二個(gè)和第三個(gè)總共兩個(gè)字符作為二級(jí)目錄,最終文件將會(huì)存儲(chǔ)在如下目錄:
/opt/nginx/client_temp/6/45/00000123456
nginx在生成目標(biāo)文件時(shí),其文件名是以順序遞增的整數(shù)進(jìn)行命名的。
語(yǔ)法:connection_pool_size size; 默認(rèn):connection_pool_size 256; 配置塊:http、server
該參數(shù)指定了nginx為每個(gè)建立成功的TCP連接預(yù)先分配的內(nèi)存池大小,size指定的是預(yù)先分配的內(nèi)存池大小。
該參數(shù)需要謹(jǐn)慎配置,因?yàn)楦蟮呐渲脤?huì)消耗服務(wù)器更多的內(nèi)存,而更小的配置將會(huì)導(dǎo)致服務(wù)器為了擴(kuò)容而進(jìn)行更多次的內(nèi)存分配。
語(yǔ)法:request_pool_size size; 默認(rèn):request_pool_size 4k; 配置塊:http、server
nginx在接收到每個(gè)http請(qǐng)求時(shí),都會(huì)為其申請(qǐng)一個(gè)內(nèi)存池,該參數(shù)指定了該內(nèi)存池的大小,需要注意的是,該內(nèi)存池本質(zhì)上就是從上面介紹的connection_pool_size
內(nèi)存池中進(jìn)行申請(qǐng);
在每次http請(qǐng)求結(jié)束時(shí),其就會(huì)銷(xiāo)毀該請(qǐng)求申請(qǐng)的內(nèi)存池,而將其返還給connection_pool_size
內(nèi)存池,而只有在此次TCP連接關(guān)閉時(shí)才會(huì)銷(xiāo)毀整個(gè)連接的內(nèi)存池。
語(yǔ)法:client_header_timeout time(默認(rèn)單位:秒); 默認(rèn):client_header_timeout 60; 配置塊:http、server、location
在客戶端與服務(wù)器建立連接之后,nginx會(huì)讀取客戶端發(fā)來(lái)的http頭部,如果超過(guò)該參數(shù)指定的時(shí)間還未讀取到客戶端發(fā)來(lái)的字節(jié),就會(huì)認(rèn)為其超時(shí)了,此時(shí)就會(huì)向客戶端返回408(Request timed out)狀態(tài)碼。
語(yǔ)法:client_body_timeout time(默認(rèn)單位:秒); 默認(rèn):client_body_timeout 60; 配置塊:http、server、location
該參數(shù)主要作用是指定nginx讀取請(qǐng)求包體的超時(shí)時(shí)間。
語(yǔ)法:send_timeout time; 默認(rèn):send_timeout 60; 配置塊:http、server、location
這個(gè)參數(shù)主要指定了nginx向客戶端發(fā)送響應(yīng)的超時(shí)時(shí)間,如果客戶端一直沒(méi)有嘗試接收數(shù)據(jù),那么nginx就會(huì)關(guān)閉這個(gè)連接。
語(yǔ)法:reset_timeout_connection on|off; 默認(rèn):reset_timeout_connection off; 配置塊:http、server、location
如果開(kāi)啟了該參數(shù),在連接超時(shí)后,nginx會(huì)向客戶端發(fā)送RST包來(lái)直接重置連接,并且會(huì)釋放服務(wù)器上關(guān)于該連接的所有緩存數(shù)據(jù)(如TCP滑動(dòng)窗口等)。相比于正常關(guān)閉的方式,它使得服務(wù)器能夠避免產(chǎn)生許多處于FIN_WAIT_1
、FIN_WAIT_2
、TIME_WAIT
狀態(tài)的TCP連接。
需要注意的是,使用RST重置包關(guān)閉連接會(huì)帶來(lái)一些問(wèn)題,默認(rèn)情況下不會(huì)開(kāi)啟。
語(yǔ)法:lingering_close off|on|always; 默認(rèn):lingering_close on; 配置塊:http、server、location
該配置塊控制nginx關(guān)閉用戶連接的方式。always表示關(guān)閉用戶連接前必須無(wú)條件的處理連接上所有用戶發(fā)送的數(shù)據(jù)。off表示關(guān)閉連接時(shí)完全不管連接上是否有用戶準(zhǔn)備就緒的數(shù)據(jù)。on是中間值,一般情況下在關(guān)閉連接前都會(huì)處理連接上的用戶發(fā)送的數(shù)據(jù),除非某些時(shí)候業(yè)務(wù)上認(rèn)定這些數(shù)據(jù)是不需要的,此時(shí)就會(huì)拋棄這些數(shù)據(jù)。
語(yǔ)法:lingering_time time; 默認(rèn):lingering_time 30s; 配置塊:http、server、location
在lingering_close
啟用后,這個(gè)配置項(xiàng)主要是針對(duì)大文件的傳輸用的,比如當(dāng)某個(gè)請(qǐng)求傳輸?shù)臄?shù)據(jù)超過(guò)了max_client_body_size
時(shí),nginx就會(huì)向該客戶端發(fā)送413(Request entity too large)狀態(tài)碼,但是某些客戶端可能不會(huì)理會(huì)該狀態(tài)碼而還是繼續(xù)向服務(wù)器發(fā)送數(shù)據(jù),此時(shí)nginx就會(huì)在該參數(shù)的超時(shí)時(shí)間之后直接關(guān)閉該連接。
語(yǔ)法:lingering_timeout time; 默認(rèn):lingering_timeout 5s; 配置塊:http、server、location
在lingering_close
啟用后,nginx在關(guān)閉連接前,會(huì)檢測(cè)用戶連接上是否還有未處理的數(shù)據(jù),如果在該參數(shù)指定的時(shí)間之后還沒(méi)有相應(yīng)的數(shù)據(jù)到達(dá),那么就會(huì)關(guān)閉該鏈接。
語(yǔ)法:keepalive_disable [msie6|safari|none]... 默認(rèn):keepalive_disablemsie6 safari 配置塊:http、server、location
該參數(shù)主要是指定對(duì)哪些瀏覽器禁用keepalive功能,keepalive會(huì)在客戶端與服務(wù)器之間建立一個(gè)長(zhǎng)連接,這對(duì)于發(fā)送多個(gè)http請(qǐng)求是非常有用的,但是對(duì)于IE6和以前版本,還有Safari瀏覽器在處理POST請(qǐng)求時(shí)會(huì)有功能性問(wèn)題,因而對(duì)于這些瀏覽器默認(rèn)是禁用的。
語(yǔ)法:keepalive_timeout time(默認(rèn)單位:秒); 默認(rèn):keepalive_timeout 75; 配置塊:http、server、location
該參數(shù)主要是在一個(gè)keepalive連接在指定時(shí)長(zhǎng)內(nèi)沒(méi)有接收到新的請(qǐng)求時(shí),將會(huì)關(guān)閉該連接。
語(yǔ)法:keepalive_requests n; 默認(rèn):keepalive_requests 100; 配置塊:http、server、location
該參數(shù)指定了一個(gè)keepalive長(zhǎng)連接上能夠承載的最大連接數(shù),默認(rèn)為100。
語(yǔ)法:tcp_nodelay on|off; 默認(rèn):tcp_nodelay on; 配置塊:http、server、location
確定對(duì)keepalive連接是否使用TCP_NODELAY選項(xiàng)
語(yǔ)法:tcp_nopush on|off; 默認(rèn):tcp_nopush off; 配置塊:http、server、location
在打開(kāi)sendfile選項(xiàng)時(shí),確定是否開(kāi)啟FreeBSD系統(tǒng)上的TCP_NOPUSH或者Linux系統(tǒng)上的TCP_CORK功能。打開(kāi)tcp_nopush后,將會(huì)在發(fā)送響應(yīng)時(shí)把整個(gè)響應(yīng)包頭放到一個(gè)TCP包中發(fā)送。
語(yǔ)法:type {...}; 配置塊:http、server、location
該配置項(xiàng)定義了MIME type到文件擴(kuò)展名的映射。多個(gè)擴(kuò)展名可以映射到同一個(gè)MIME type。例如:
types { text/html html; text/html conf; image/gif gif; image/jpeg jpg; }
語(yǔ)法:default_type MIME-type; 默認(rèn):default_type text/plain; 配置塊:http、server、location
當(dāng)找不到相應(yīng)的MIME type與文件擴(kuò)展名之間的映射時(shí),使用默認(rèn)的MIME type作為http header的Content-Type
。
語(yǔ)法:types_hash_max_size size; 默認(rèn):types_hash_max_size 1024; 配置塊:http、server、location
nginx使用了一個(gè)散列表來(lái)保存MIME type與文件擴(kuò)展名之間的映射,該參數(shù)就是指定該散列表桶的大小的。
語(yǔ)法:types_hash_max_size size; 默認(rèn):types_hash_max_size 1024; 配置塊:http、server、location
該參數(shù)指定了存儲(chǔ)MIME type與文件擴(kuò)展名的散列的最大大小,該值越大,散列的key就越稀疏,檢索速度越快,但是會(huì)占用更多的內(nèi)存;該值越小,占用的內(nèi)存越小,但是沖突率就會(huì)上升,檢索越慢。
語(yǔ)法:limit_except method...{...} 配置塊:location
該配置項(xiàng)的主要作用是限制某些方法的請(qǐng)求的訪問(wèn),后面的參數(shù)可取GET、HEAD、POST、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK或者PATCH。示例如:
limit_except GET { allow 192.168.1.0/32; deny all; }
上述配置將會(huì)限制所有的GET請(qǐng)求的訪問(wèn),而允許其他方法的請(qǐng)求。
語(yǔ)法:client_max_body_size size; 默認(rèn):client_max_body_size 1m; 配置塊:http、server、location
該參數(shù)指定了http請(qǐng)求的最大包體的大小,nginx會(huì)根據(jù)請(qǐng)求header中的Content-Length
所表示的長(zhǎng)度來(lái)判斷其與當(dāng)前參數(shù)是否符合,如果不符合,則直接返回給客戶端413(Request too large)狀態(tài)碼。
語(yǔ)法:limit_rate speed; 默認(rèn):limit_rate 0; 配置塊:http、server、location、if
該配置主要是對(duì)客戶端的請(qǐng)求進(jìn)行每秒傳輸?shù)淖止?jié)大小進(jìn)行限速,默認(rèn)為0,表示不限速;
針對(duì)不同的客戶端,可以使用$limit_rate
參數(shù)執(zhí)行不同的限速策略。如:
server { if ($slow) { set $limit_rate 4k; } }
語(yǔ)法:limit_rate_after time; 默認(rèn):limit_rate_after 1m; 配置塊:http、server、location、if
該參數(shù)表示nginx向客戶端發(fā)送的響應(yīng)大小超過(guò)limit_rate_after
指定的值之后才開(kāi)始限速。
語(yǔ)法:sendfile on|off; 默認(rèn):sendfile off; 配置塊:http、server、location
該參數(shù)用于打開(kāi)Linux上的sendfile系統(tǒng)調(diào)用,在發(fā)送數(shù)據(jù)到網(wǎng)卡上時(shí),它減少了兩次在用戶態(tài)與內(nèi)核態(tài)之間的數(shù)據(jù)拷貝過(guò)程,而直接在磁盤(pán)讀取數(shù)據(jù)之后發(fā)送到網(wǎng)卡上,從而提升數(shù)據(jù)發(fā)送效率。
語(yǔ)法:aio on|off; 默認(rèn):aio off; 配置塊:http、server、location
該參數(shù)指定了是否在FreeBSD或Linux系統(tǒng)上啟動(dòng)內(nèi)核級(jí)別的異步文件I/O功能,需要注意的是,其與sendfile功能是互斥的。
語(yǔ)法:directio size|off; 默認(rèn):directio off; 配置塊:http、server、location
該配置項(xiàng)在FreeBSD和Linux系統(tǒng)上使用O_DIRECT選項(xiàng)去讀取文件,緩沖區(qū)大小為size,通常對(duì)大文件的讀取速度有優(yōu)化作用。注意,它與sendfile指令是互斥的。
語(yǔ)法:directio_alignment size; 默認(rèn):directio_alignment 512; 配置塊:http、server、location
它與directio配合使用,指定以directio方式讀取文件時(shí)的對(duì)其方式。一般情況下,512B已經(jīng)足夠了,但對(duì)于一些高性能文件系統(tǒng),如Linux下的XFS文件系統(tǒng),可能需要設(shè)置4KB作為對(duì)齊方式。
語(yǔ)法:open_file_cache max=N[inactive=time]|off; 默認(rèn):open_file_cache off; 配置塊:http、server、location
文件緩存會(huì)在內(nèi)存中存儲(chǔ)以下三種信息:
文件句柄、文件大小和上次修改時(shí)間;
已經(jīng)打開(kāi)過(guò)的目錄結(jié)構(gòu);
沒(méi)有找到的或者沒(méi)有權(quán)限操作的文件信息;
上面的配置項(xiàng)的三個(gè)參數(shù)的含義如下:
max:表示內(nèi)存中存儲(chǔ)元素的最大個(gè)數(shù)。當(dāng)達(dá)到最大限制數(shù)量后,將采用LRU算法從緩存中淘汰最近最少使用的元素;
inactive:表示在inactive指定的時(shí)間段內(nèi)沒(méi)有被訪問(wèn)過(guò)的元素將會(huì)被淘汰。默認(rèn)時(shí)間為60秒;
off:關(guān)閉緩存功能。
示例如下:
open_file_cache max=1000 inactive=20s;
語(yǔ)法:open_file_cache_errors on|off; 默認(rèn):open_file_cache_errors off; 配置塊:http、server、location
該配置項(xiàng)表示是否對(duì)打開(kāi)文件時(shí)找不到文件或者權(quán)限錯(cuò)誤等信息進(jìn)行緩存。
語(yǔ)法:open_file_cache_min_uses number; 默認(rèn):open_file_cache_min_uses 1; 配置塊:http、server、location
該參數(shù)與open_file_cache
配合使用,如果在指定時(shí)間內(nèi)訪問(wèn)該文件的次數(shù)小于該參數(shù)指定的次數(shù),那么該文件還是會(huì)被淘汰。
語(yǔ)法:open_file_cache_valid time; 默認(rèn):open_file_cahce_valid 60s; 配置塊:http、server、location
該參數(shù)指定了每間隔多長(zhǎng)時(shí)間檢查一下緩存中數(shù)據(jù)的有效性,默認(rèn)為60秒。
語(yǔ)法:ignore_invalid_headers on|off; 默認(rèn):ignore_invalid_headers on; 配置塊:http、server
如果將其設(shè)置為off,那么當(dāng)客戶端請(qǐng)求中有不合法的header時(shí),就會(huì)直接響應(yīng)400(Bad Request);如果將其設(shè)置為on,那么就會(huì)忽略此header。
語(yǔ)法:underscores_in_headers on|off; 默認(rèn):underscores_in_headers off; 配置塊:http、server
該參數(shù)指定了http頭部中是否能夠帶有下劃線,默認(rèn)是不允許。
語(yǔ)法:if_modified_since [off|exact|before]; 默認(rèn):if_modified_since exact; 配置塊:http、server、location
If-Modified-Since頭部主要是瀏覽器處于性能考慮而作的一個(gè)緩存策略,瀏覽器在請(qǐng)求過(guò)一份文件之后,會(huì)將該文件在本地緩存,并記錄緩存時(shí)間,在下次請(qǐng)求時(shí)會(huì)在If-Modified-Since
頭部中帶上上次緩存的時(shí)間,服務(wù)器在接收到該請(qǐng)求時(shí),會(huì)將服務(wù)器文件的修改時(shí)間與請(qǐng)求中的時(shí)間進(jìn)行比較,如果文件在這之后有過(guò)修改,那么服務(wù)器就會(huì)正常的返回文件內(nèi)容以及200狀態(tài)碼,如果文件沒(méi)有修改過(guò),那么說(shuō)明瀏覽器中緩存的文件是最新的,此時(shí)就會(huì)返回304(Not Modified)狀態(tài)碼。
該配置參數(shù)有三個(gè)選項(xiàng),其含義分別如下:
off:表示忽略用戶請(qǐng)求中的If-Modified-Since
頭部,在每次請(qǐng)求時(shí)都將文件內(nèi)容返回,此時(shí)響應(yīng)狀態(tài)碼為200;
exact:將If-Modified-Since
頭部包含的時(shí)間與將要返回的文件的上次修改時(shí)間做精確比較,如果沒(méi)有匹配上,則返回200和文件的實(shí)際內(nèi)容,如果匹配上了,則表示文件內(nèi)容已經(jīng)是最新的,此時(shí)就會(huì)返回304(Not Modified)狀態(tài)碼,瀏覽器收到后會(huì)直接讀取本地緩存;
before:這個(gè)是比exact更寬松的策略,只要文件的上次修改時(shí)間在用戶請(qǐng)求的If-Modified-Since
頭部指定的時(shí)間之前,那么就會(huì)向客戶端返回304(Not Modified)狀態(tài)碼。
語(yǔ)法:log_not_found on|off; 默認(rèn):log_not_found on; 配置塊:http、server、location
該配置的主要作用在于,當(dāng)用戶請(qǐng)求某個(gè)文件時(shí),如果該文件不存在,是否將這條信息記錄在error日志中,主要用于定位問(wèn)題。
語(yǔ)法:merge_slashes on|off; 默認(rèn):merge_slashes on; 配置塊:http、server、location
該配置項(xiàng)表示是否合并相鄰的/
,例如//test///a.txt
,在配置為on時(shí),會(huì)將其匹配為location/test/a.txt
;如果配置為off,則不會(huì)匹配,URI將仍然是//test///a.txt
。
語(yǔ)法:resolver address...; 配置塊:http、server、location
設(shè)置DNS名字解析服務(wù)器的地址,如:
resolver 127.0.0.1 192.0.2.1;
語(yǔ)法:resolver_timeout time; 默認(rèn):resolver_timeout 30s; 配置塊:http、server、location
次配置項(xiàng)表示DNS解析的超時(shí)時(shí)間
語(yǔ)法:server_tokens on|off; 默認(rèn):server_tokens on; 配置塊:http、server、location
表示在返回錯(cuò)誤頁(yè)面時(shí)是否在Server頭部中返回具體的nginx版本,這主要是為了定位問(wèn)題方便。
感謝各位的閱讀,以上就是“Nginx的基本屬性配置”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Nginx的基本屬性配置這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。