nginx調(diào)優(yōu)

轉(zhuǎn)載別人的文章,nginx調(diào)優(yōu)。鏈接如下:http://blog.csdn.net/xifeijian/article/details/20956605

大多數(shù)的Nginx安裝指南告訴你如下基礎(chǔ)知識(shí)——通過(guò)apt-get安裝,修改這里或那里的幾行配置,好了,你已經(jīng)有了一個(gè)Web服務(wù)器了。而且,在大多數(shù)情況下,一個(gè)常規(guī)安裝的nginx對(duì)你的網(wǎng)站來(lái)說(shuō)已經(jīng)能很好地工作了。然而,如果你真的想擠壓出Nginx的性能,你必須更深入一些。在本指南中,我將解釋Nginx的那些設(shè)置可以微調(diào),以優(yōu)化處理大量客戶端時(shí)的性能。需要注意一點(diǎn),這不是一個(gè)全面的微調(diào)指南。這是一個(gè)簡(jiǎn)單的預(yù)覽——那些可以通過(guò)微調(diào)來(lái)提高性能設(shè)置的概述。你的情況可能不同。

基本的 (優(yōu)化過(guò)的)配置

我們將修改的唯一文件是nginx.conf,其中包含Nginx不同模塊的所有設(shè)置。你應(yīng)該能夠在服務(wù)器的/etc/nginx目錄中找到nginx.conf。首先,我們將談?wù)撘恍┤衷O(shè)置,然后按文件中的模塊挨個(gè)來(lái),談一下哪些設(shè)置能夠讓你在大量客戶端訪問(wèn)時(shí)擁有良好的性能,為什么它們會(huì)提高性能。本文的結(jié)尾有一個(gè)完整的配置文件。

高層的配置

nginx.conf文件中,Nginx中有少數(shù)的幾個(gè)高級(jí)配置在模塊部分之上。

user?www-data;?

pid?/var/run/nginx.pid;?

worker_processes?auto;?

worker_rlimit_nofile?100000;?

user和pid應(yīng)該按默認(rèn)設(shè)置 - 我們不會(huì)更改這些內(nèi)容,因?yàn)楦呐c否沒(méi)有什么不同。

worker_processes?定義了nginx對(duì)外提供web服務(wù)時(shí)的worker進(jìn)程數(shù)。最優(yōu)值取決于許多因素,包括(但不限于)CPU核的數(shù)量、存儲(chǔ)數(shù)據(jù)的硬盤數(shù)量及負(fù)載模式。不能確定的時(shí)候,將其設(shè)置為可用的CPU內(nèi)核數(shù)將是一個(gè)好的開(kāi)始(設(shè)置為“auto”將嘗試自動(dòng)檢測(cè)它)。

worker_rlimit_nofile?更改worker進(jìn)程的最大打開(kāi)文件數(shù)限制。如果沒(méi)設(shè)置的話,這個(gè)值為操作系統(tǒng)的限制。設(shè)置后你的操作系統(tǒng)和Nginx可以處理比“ulimit -a”更多的文件,所以把這個(gè)值設(shè)高,這樣nginx就不會(huì)有“too many open files”問(wèn)題了。

Events模塊

events模塊中包含nginx中所有處理連接的設(shè)置。

events?{?

worker_connections?2048;?

multi_accept?on;?

use?epoll;?

}?

worker_connections?設(shè)置可由一個(gè)worker進(jìn)程同時(shí)打開(kāi)的最大連接數(shù)。如果設(shè)置了上面提到的worker_rlimit_nofile,我們可以將這個(gè)值設(shè)得很高。

記住,最大客戶數(shù)也由系統(tǒng)的可用socket連接數(shù)限制(~ 64K),所以設(shè)置不切實(shí)際的高沒(méi)什么好處。

multi_accept?告訴nginx收到一個(gè)新連接通知后接受盡可能多的連接。

use?設(shè)置用于復(fù)用客戶端線程的輪詢方法。如果你使用Linux 2.6+,你應(yīng)該使用epoll。如果你使用*BSD,你應(yīng)該使用kqueue。

(值得注意的是如果你不知道Nginx該使用哪種輪詢方法的話,它會(huì)選擇一個(gè)最適合你操作系統(tǒng)的)

HTTP 模塊

HTTP模塊控制著nginx http處理的所有核心特性。因?yàn)檫@里只有很少的配置,所以我們只節(jié)選配置的一小部分。所有這些設(shè)置都應(yīng)該在http模塊中,甚至你不會(huì)特別的注意到這段設(shè)置。

http?{?

server_tokens?off;?

sendfile?on;?

tcp_nopush?on;?

tcp_nodelay?on;?

...?

}?

server_tokens ?并不會(huì)讓nginx執(zhí)行的速度更快,但它可以關(guān)閉在錯(cuò)誤頁(yè)面中的nginx版本數(shù)字,這樣對(duì)于安全性是有好處的。

sendfile?可以讓sendfile()發(fā)揮作用。sendfile()可以在磁盤和TCP socket之間互相拷貝數(shù)據(jù)(或任意兩個(gè)文件描述符)。Pre-sendfile是傳送數(shù)據(jù)之前在用戶空間申請(qǐng)數(shù)據(jù)緩沖區(qū)。之后用read()將數(shù)據(jù)從文件拷貝到這個(gè)緩沖區(qū),write()將緩沖區(qū)數(shù)據(jù)寫入網(wǎng)絡(luò)。sendfile()是立即將數(shù)據(jù)從磁盤讀到OS緩存。因?yàn)檫@種拷貝是在內(nèi)核完成的,sendfile()要比組合read()和write()以及打開(kāi)關(guān)閉丟棄緩沖更加有效(更多有關(guān)于sendfile)。

tcp_nopush?告訴nginx在一個(gè)數(shù)據(jù)包里發(fā)送所有頭文件,而不一個(gè)接一個(gè)的發(fā)送。

tcp_nodelay?告訴nginx不要緩存數(shù)據(jù),而是一段一段的發(fā)送--當(dāng)需要及時(shí)發(fā)送數(shù)據(jù)時(shí),就應(yīng)該給應(yīng)用設(shè)置這個(gè)屬性,這樣發(fā)送一小塊數(shù)據(jù)信息時(shí)就不能立即得到返回值。

access_log?off;?

error_log?/var/log/nginx/error.log?crit;?

access_log?設(shè)置nginx是否將存儲(chǔ)訪問(wèn)日志。關(guān)閉這個(gè)選項(xiàng)可以讓讀取磁盤IO操作更快(aka,YOLO)

error_log?告訴nginx只能記錄嚴(yán)重的錯(cuò)誤:

keepalive_timeout?10;?

client_header_timeout?10;?

client_body_timeout?10;?

reset_timedout_connection?on;?

send_timeout?10;?

keepalive_timeout?給客戶端分配keep-alive鏈接超時(shí)時(shí)間。服務(wù)器將在這個(gè)超時(shí)時(shí)間過(guò)后關(guān)閉鏈接。我們將它設(shè)置低些可以讓ngnix持續(xù)工作的時(shí)間更長(zhǎng)。

client_header_timeout 和client_body_timeout?設(shè)置請(qǐng)求頭和請(qǐng)求體(各自)的超時(shí)時(shí)間。我們也可以把這個(gè)設(shè)置低些。

reset_timeout_connection?告訴nginx關(guān)閉不響應(yīng)的客戶端連接。這將會(huì)釋放那個(gè)客戶端所占有的內(nèi)存空間。

send_timeout?指定客戶端的響應(yīng)超時(shí)時(shí)間。這個(gè)設(shè)置不會(huì)用于整個(gè)轉(zhuǎn)發(fā)器,而是在兩次客戶端讀取操作之間。如果在這段時(shí)間內(nèi),客戶端沒(méi)有讀取任何數(shù)據(jù),nginx就會(huì)關(guān)閉連接。

limit_conn_zone?$binary_remote_addr?zone=addr:5m;?

limit_conn?addr?100;?

limit_conn_zone?設(shè)置用于保存各種key(比如當(dāng)前連接數(shù))的共享內(nèi)存的參數(shù)。5m就是5兆字節(jié),這個(gè)值應(yīng)該被設(shè)置的足夠大以存儲(chǔ)(32K*5)32byte狀態(tài)或者(16K*5)64byte狀態(tài)。

limit_conn?為給定的key設(shè)置最大連接數(shù)。這里key是addr,我們?cè)O(shè)置的值是100,也就是說(shuō)我們?cè)试S每一個(gè)IP地址最多同時(shí)打開(kāi)有100個(gè)連接。

include?/etc/nginx/mime.types;?

default_type?text/html;?

charset?UTF-8;?

include?只是一個(gè)在當(dāng)前文件中包含另一個(gè)文件內(nèi)容的指令。這里我們使用它來(lái)加載稍后會(huì)用到的一系列的MIME類型。

default_type?設(shè)置文件使用的默認(rèn)的MIME-type。

charset?設(shè)置我們的頭文件中的默認(rèn)的字符集

gzip?on;?

gzip_disable?"msie6";?

#?gzip_static?on;?

gzip_proxied?any;?

gzip_min_length?1000;?

gzip_comp_level?4;?

gzip_types?text/plain?text/css?application/json?application/x-javascript?text/xml?application/xml?application/xml+rss?text/javascript;?

gzip?是告訴nginx采用gzip壓縮的形式發(fā)送數(shù)據(jù)。這將會(huì)減少我們發(fā)送的數(shù)據(jù)量。

gzip_disable?為指定的客戶端禁用gzip功能。我們?cè)O(shè)置成IE6或者更低版本以使我們的方案能夠廣泛兼容。

gzip_static?告訴nginx在壓縮資源之前,先查找是否有預(yù)先gzip處理過(guò)的資源。這要求你預(yù)先壓縮你的文件(在這個(gè)例子中被注釋掉了),從而允許你使用最高壓縮比,這樣nginx就不用再壓縮這些文件了(想要更詳盡的gzip_static的信息,請(qǐng)點(diǎn)擊這里)。

gzip_proxied?允許或者禁止壓縮基于請(qǐng)求和響應(yīng)的響應(yīng)流。我們?cè)O(shè)置為any,意味著將會(huì)壓縮所有的請(qǐng)求。

gzip_min_length?設(shè)置對(duì)數(shù)據(jù)啟用壓縮的最少字節(jié)數(shù)。如果一個(gè)請(qǐng)求小于1000字節(jié),我們最好不要壓縮它,因?yàn)閴嚎s這些小的數(shù)據(jù)會(huì)降低處理此請(qǐng)求的所有進(jìn)程的速度。

gzip_comp_level?設(shè)置數(shù)據(jù)的壓縮等級(jí)。這個(gè)等級(jí)可以是1-9之間的任意數(shù)值,9是最慢但是壓縮比最大的。我們?cè)O(shè)置為4,這是一個(gè)比較折中的設(shè)置。

gzip_type?設(shè)置需要壓縮的數(shù)據(jù)格式。上面例子中已經(jīng)有一些了,你也可以再添加更多的格式。

#?cache?informations?about?file?descriptors,?frequently?accessed?files?

#?can?boost?performance,?but?you?need?to?test?those?values?

open_file_cachemax=100000?inactive=20s;?

open_file_cache_valid?30s;?

open_file_cache_min_uses?2;?

open_file_cache_errors?on;?

##?

#?Virtual?Host?Configs?

#?aka?our?settings?for?specific?servers?

##?

include?/etc/nginx/conf.d/*.conf;?

include?/etc/nginx/sites-enabled/*;?

open_file_cache?打開(kāi)緩存的同時(shí)也指定了緩存最大數(shù)目,以及緩存的時(shí)間。我們可以設(shè)置一個(gè)相對(duì)高的最大時(shí)間,這樣我們可以在它們不活動(dòng)超過(guò)20秒后清除掉。

open_file_cache_valid?在open_file_cache中指定檢測(cè)正確信息的間隔時(shí)間。

open_file_cache_min_uses?定義了open_file_cache中指令參數(shù)不活動(dòng)時(shí)間期間里最小的文件數(shù)。

open_file_cache_errors?指定了當(dāng)搜索一個(gè)文件時(shí)是否緩存錯(cuò)誤信息,也包括再次給配置中添加文件。我們也包括了服務(wù)器模塊,這些是在不同文件中定義的。如果你的服務(wù)器模塊不在這些位置,你就得修改這一行來(lái)指定正確的位置。

一個(gè)完整的配置

user?www-data;?

pid?/var/run/nginx.pid;?

worker_processes?auto;?

worker_rlimit_nofile?100000;?

events?{?

worker_connections?2048;?

multi_accept?on;?

use?epoll;?

}?

http?{?

server_tokens?off;?

sendfile?on;?

tcp_nopush?on;?

tcp_nodelay?on;?

access_log?off;?

error_log?/var/log/nginx/error.log?crit;?

keepalive_timeout?10;?

client_header_timeout?10;?

client_body_timeout?10;?

reset_timedout_connection?on;?

send_timeout?10;?

limit_conn_zone?$binary_remote_addrzone=addr:5m;?

limit_conn?addr?100;?

include?/etc/nginx/mime.types;?

default_type?text/html;?

charset?UTF-8;?

gzip?on;?

gzip_disable?"msie6";?

gzip_proxied?any;?

gzip_min_length?1000;?

gzip_comp_level?6;?

gzip_types?text/plain?text/css?application/json?application/x-javascript?text/xml?application/xml?application/xml+rss?text/javascript;?

open_file_cachemax=100000?inactive=20s;?

open_file_cache_valid?30s;?

open_file_cache_min_uses?2;?

open_file_cache_errors?on;?

include?/etc/nginx/conf.d/*.conf;?

include?/etc/nginx/sites-enabled/*;?

}?

編輯完配置后,確認(rèn)重啟nginx使設(shè)置生效。


下面這描述也是非常好的:http://blog.csdn.net/xyang81/article/details/51814787

Nginx的配置是以模塊為單位來(lái)組織的,每一個(gè)模塊包含一個(gè)或多個(gè)指令,指令是配置文件中的最小配置單元,一切配置項(xiàng)皆為指令。如http核心模塊中的include、default_type、sendfile指令,都屬于http模塊。nginx所有模塊中的指令見(jiàn)官方文檔說(shuō)明:http://nginx.org/en/docs/dirindex.html

注意:以下配置中的“上下文”表示指令可以配置在哪些模塊中。

main:頂層配置,約束服務(wù)器的行為

1、服務(wù)器級(jí)別核心配置

指令上下文語(yǔ)法默認(rèn)值功能描述

usermainuser nobody nobyd;nobody以哪個(gè)用戶權(quán)限運(yùn)行工作線程

daemonmaindaemon yes;yesnginx是否以守護(hù)進(jìn)程運(yùn)行

worker_processesmainworker_processes number;1配置工作進(jìn)程數(shù)。傳統(tǒng)的web服務(wù)器(如apache)都是同步阻塞模型,一請(qǐng)求一進(jìn)(線)程模式,當(dāng)進(jìn)(線)程數(shù)增達(dá)到一定程度后,更多CPU時(shí)間浪費(fèi)在線程和進(jìn)程切換當(dāng)中,性能急劇下降,所以負(fù)載率不高。Nginx是基于事件的非阻塞多路復(fù)用(epoll或kquene)模型,一個(gè)進(jìn)程在短時(shí)間內(nèi)就可以響應(yīng)大量的請(qǐng)求。建議將該值設(shè)置<=cpu核心數(shù)量,一般高于cpu核心數(shù)量不會(huì)帶來(lái)好處,反而可能會(huì)有進(jìn)程切換開(kāi)銷的負(fù)面影響。

worker_connectionseventsworker_connections number;1024并發(fā)響應(yīng)能力的關(guān)鍵配置值,表示每個(gè)進(jìn)程允許的最大同時(shí)連接數(shù)。maxConnection = work_connections * worker_processes;一般一個(gè)瀏覽器會(huì)同時(shí)開(kāi)兩條連接,如果是反向代理,nginx到后服務(wù)器的連接數(shù)量也要占用2條連接數(shù),所以,做靜態(tài)服務(wù)器,一般maxConnection = work_connections * worker_processes / 2; 做反代理服務(wù)器時(shí)maxConnection = work_connections * worker_processes / 4;

useeventsuse epoll;根據(jù)不同的平臺(tái),選擇最高效的連接處理方法指定處理連接請(qǐng)求的方法。linux內(nèi)核2.6以上默認(rèn)使用epoll方法,其它平臺(tái)請(qǐng)參考:http://nginx.org/en/docs/events.html?備注:要達(dá)到超高負(fù)載下最好的網(wǎng)絡(luò)響應(yīng)能力,還有必要優(yōu)化與網(wǎng)絡(luò)相關(guān)的linux內(nèi)核參數(shù)

worker_cpu_affinitymainworker_cpu_affinity cpumask …;無(wú)將工作進(jìn)程綁定到特定的CPU上,減少CPU在進(jìn)程之間切換的開(kāi)銷。用二進(jìn)制bit位表示進(jìn)程綁定在哪個(gè)CPU內(nèi)核。如8內(nèi)核4進(jìn)程時(shí)的設(shè)置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000

worker_rlimit_nofilemainworker_rlimit_core size;受linux內(nèi)核文件描述符數(shù)量限制設(shè)置nginx最大能打開(kāi)的文件描述符數(shù)量。因?yàn)長(zhǎng)inux對(duì)每個(gè)進(jìn)程所能打開(kāi)的文件描述數(shù)量是有限制的,默認(rèn)一般是1024個(gè),可通過(guò)ulimit -n FILECNT或/etc/securit/limits.conf配置修改linux默認(rèn)能打開(kāi)的文件句柄數(shù)限制。建議值為:系統(tǒng)最大數(shù)量/進(jìn)程數(shù)。但進(jìn)程間工作量并不是平均分配的,所以可以設(shè)置在大一些。推薦值為:655350

error_logmain, http, mail, stream, server, locationerror_log 日志文件路徑 日志級(jí)別;error_log logs/error.log error;配置錯(cuò)誤日志文件的路徑和日志級(jí)別。日志級(jí)別有debug, info, notice, warn, error, crit, alert和emerg幾種。nginx的日志使用syslog輸出,所以輸出的日志格式是有規(guī)律的,系統(tǒng)運(yùn)維人員可以根據(jù)日志規(guī)則進(jìn)行查錯(cuò)或統(tǒng)計(jì)分析。更多說(shuō)明請(qǐng)參考官方文檔:http://nginx.org/en/docs/ngx_core_module.html#error_log

pidmainpid 守護(hù)進(jìn)程socket文件路徑;pid logs/nginx.pid配置nginx守護(hù)進(jìn)程ID存儲(chǔ)文件路徑(不是工作進(jìn)程)

以上是nginx的頂層配置,管理服務(wù)器級(jí)別的行為。更多配置請(qǐng)參考官方文檔:http://nginx.org/en/docs/ngx_core_module.html#working_directory

2、HTTP模塊核心配置

nginx做為一個(gè)HTTP反向代理服務(wù)器,平時(shí)接觸得最多的應(yīng)該是針對(duì)http請(qǐng)求的相關(guān)配置了,和http模塊有關(guān)的所有配置都放在http { ... }配置中。

指令上下文語(yǔ)法功能描述

typeshttp, server, locationtypes { mime類型 文件后綴;};配置能處理的文件類型。如:text/html html htm shtml;

includeanyinclude 文件路徑;將外部文件的內(nèi)容做為配置拷貝到nginx.conf文件中。如:include mime.type; 將當(dāng)前目錄下的mime.type配置文件拷貝到nginx配置文件中。文件路徑可以是相對(duì)路徑或絕對(duì)路徑。文件名可以用*來(lái)表示通配符。

default_typehttp, server, locationdefault_type mime類型;文件名到后綴的映射關(guān)系。配置默認(rèn)的mime類型,當(dāng)在types指令中找不到請(qǐng)求的文件類型時(shí),就使用default_type指定的類型。默認(rèn)為text/plain類型。

access_loghttp, server, location, if in location, limit_exceptaccess_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

關(guān)閉或開(kāi)啟訪問(wèn)日志。默認(rèn)配置為:access_log logs/access.log combined; 表示根據(jù)combined定義的日志格式,寫入logs/access.log文件中,combined是http模塊默認(rèn)格式。如果定義了buffer和gzip其中一個(gè)參數(shù),日志默認(rèn)會(huì)先寫入緩存中,當(dāng)緩存滿了之后,通過(guò)gzip壓縮緩存中的日志并寫入文件,啟用了gzip壓縮必須保證nginx安裝的時(shí)候添加了gzip模塊。緩存大小默認(rèn)為64K??梢耘渲胓zip的1~9的壓縮級(jí)別,級(jí)別越高壓縮效率越大,日志文件占用的空間越小,但要求系統(tǒng)性能也越高。默認(rèn)值是1。http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

log_formathttplog_format 格式名稱 日志格式;定義http訪問(wèn)日志的格式,在日志格式中可以訪問(wèn)http模塊的內(nèi)嵌變量,如果變存在的話,會(huì)做為日志輸出。如:remoteaddr,request等,更多變量請(qǐng)參考:http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

sendfilehttp, server, location, if in locationsendfile on | off;啟用內(nèi)核復(fù)制模式。作為靜態(tài)服務(wù)器可以提高最大的IO訪問(wèn)速度。傳統(tǒng)的文件讀寫采用read和write方式,流程為:硬盤 >> kernel buffer >> user buffer>> kernel socket buffer >>協(xié)議棧,采用sendfile文件讀寫的流程為:硬盤 >> kernel buffer (快速拷貝到kernelsocket buffer) >>協(xié)議棧,很明顯sendfile這個(gè)系統(tǒng)調(diào)用減少了內(nèi)核到用戶模式之間的切換和數(shù)據(jù)拷貝次數(shù),直接從內(nèi)核緩存的數(shù)據(jù)拷貝到協(xié)議棧,提高了很大的效率。這篇文章介紹比較詳細(xì):http://xiaorui.cc/?p=1673

tcp_nodelayhttp, server, locationoff|on;

tcp_nopushhttp, server, locationoff|on;tcp_nodelay和tcp_nopush這兩個(gè)參數(shù)是配合使用的,啟動(dòng)這兩項(xiàng)配置,會(huì)在數(shù)據(jù)包達(dá)到一定大小后再發(fā)送數(shù)據(jù)。這樣會(huì)減少網(wǎng)絡(luò)通信次數(shù),降低阻塞概率,但也會(huì)影響響應(yīng)及時(shí)性。比較適合于文件下載這類的大數(shù)據(jù)通信場(chǎng)景。

keepalive_timeouthttp, server, locationkeepalive_time 65;客戶端到服務(wù)器建立連接的超時(shí)時(shí)長(zhǎng),超過(guò)指定的時(shí)間服務(wù)器就會(huì)斷開(kāi)連接。默認(rèn)為75秒。降低每個(gè)連接的alive時(shí)間可在一定程度上提高可響應(yīng)連接數(shù)量,所以一般可適當(dāng)降低此值

gziphttp, server, location, if in locationgzip on | off;開(kāi)啟內(nèi)容壓縮,可以有效降低客戶端的訪問(wèn)流量和網(wǎng)絡(luò)帶寬

gzip_min_lengthhttp, server, locationgzip_min_length length;單位為k,默認(rèn)為20k。內(nèi)容超過(guò)最少長(zhǎng)度后才開(kāi)啟壓縮,因?yàn)樘痰膬?nèi)容壓縮效果不佳,且壓縮過(guò)程還會(huì)浪費(fèi)系統(tǒng)資源。這個(gè)壓縮長(zhǎng)度會(huì)作為http響應(yīng)頭Content-Length字段返回給客戶端。 建議值:1000

gzip_comp_levelhttp, server, locationgzip_comp_level 1~9;壓縮級(jí)別,默認(rèn)值為1。范圍為1~9級(jí),壓縮級(jí)別越高壓縮率越高,但對(duì)系統(tǒng)性能要求越高。建議值:4

gzip_typeshttp, server, locationgzip_types mime-type …;壓縮內(nèi)容類型,默認(rèn)為text/html;。只壓縮html文本,一般我們都會(huì)壓縮js、css、json之類的,可以把這些常見(jiàn)的文本數(shù)據(jù)都配上。如:text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

open_file_cachehttp, server, locationopen_file_cache off; open_file_cache max=N [inactive=time];默認(rèn)值為off; 設(shè)置最大緩存數(shù)量,及緩存文件未使用的存活期。建議值:max=655350(和worker_rlimit_nofile參數(shù)一致) inactive=20s;

open_file_

cache_min_uses

http, server, locationopen_file_cache_min_uses number;默認(rèn)為1,有效期內(nèi)文件最少使有的次數(shù)。建議值:2

open_file

_cache_valid

http, server, locationopen_file_cache_valid time;默認(rèn)為60s,驗(yàn)證緩存有效期時(shí)間間隔。 表示每隔60s檢查一下緩存的文件當(dāng)中,有哪些文件在20s以內(nèi)沒(méi)有使用超過(guò)2次的,就從緩存中刪除。采用lru算法。

serverserver { … }httpHTTP服務(wù)器的核心配置,用于配置HTTP服務(wù)器的虛擬主機(jī),可以配置多個(gè)

listenlisten ip[:端口]server配置虛擬主機(jī)監(jiān)聽(tīng)的IP地址和端口,默認(rèn)監(jiān)聽(tīng)本機(jī)IP地址和80或8000端口。如果只設(shè)置了IP沒(méi)設(shè)端口,默認(rèn)使用80端口。如果只設(shè)置了端口,沒(méi)設(shè)置IP默認(rèn)使用本機(jī)IP。詳細(xì)配置請(qǐng)參考:http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

server_nameserver_name domain_name …;server配置虛擬主機(jī)的域名,可以指定多個(gè),用空格分隔。默認(rèn)為空

charsethttp, server, location, if in locationcharset charset | off;設(shè)置請(qǐng)求編碼,和url參數(shù)亂碼問(wèn)題有關(guān)。

locationserver, locationlocation [ = | ~ | ~* | ^~ ] uri { … }?

location @name { … }

http請(qǐng)求中的一個(gè)重要配置項(xiàng),用于配置客戶端請(qǐng)求服務(wù)器url地址的匹配規(guī)則??梢耘渲枚鄠€(gè)匹配規(guī)則

3、核心配置優(yōu)化

# nginx不同于apache服務(wù)器,當(dāng)進(jìn)行了大量?jī)?yōu)化設(shè)置后會(huì)魔術(shù)般的明顯性能提升效果# nginx在安裝完成后,大部分參數(shù)就已經(jīng)是最優(yōu)化了,我們需要管理的東西并不多#user? nobody;#阻塞和非阻塞網(wǎng)絡(luò)模型:#同步阻塞模型,一請(qǐng)求一進(jìn)(線)程,當(dāng)進(jìn)(線)程增加到一定程度后#更多CPU時(shí)間浪費(fèi)到切換一,性能急劇下降,所以負(fù)載率不高#Nginx基于事件的非阻塞多路復(fù)用(epoll或kquene)模型#一個(gè)進(jìn)程在短時(shí)間內(nèi)可以響應(yīng)大量的請(qǐng)求#建議值 <= cpu核心數(shù)量,一般高于cpu數(shù)量不會(huì)帶好處,也許還有進(jìn)程切換開(kāi)銷的負(fù)面影響worker_processes4;#將work process綁定到特定cpu上,避免進(jìn)程在cpu間切換的開(kāi)銷worker_cpu_affinity0001001001001000#8內(nèi)核4進(jìn)程時(shí)的設(shè)置方法 worker_cpu_affinity 00000001 00000010 00000100 10000000# 每進(jìn)程最大可打開(kāi)文件描述符數(shù)量(linux上文件描述符比較廣義,網(wǎng)絡(luò)端口、設(shè)備、磁盤文件都是)# 文件描述符用完了,新的連接會(huì)被拒絕,產(chǎn)生502類錯(cuò)誤# linux最大可打開(kāi)文件數(shù)可通過(guò)ulimit -n FILECNT或 /etc/security/limits.conf配置# 理論值 系統(tǒng)最大數(shù)量 / 進(jìn)程數(shù)。但進(jìn)程間工作量并不是平均分配的,所以可以設(shè)置的大一些worker_rlimit_nofile65535;#error_log? logs/error.log;#error_log? logs/error.log? notice;#error_log? logs/error.log? info;#pid? ? ? ? logs/nginx.pid;events {# 并發(fā)響應(yīng)能力的關(guān)鍵配置值# 每個(gè)進(jìn)程允許的最大同時(shí)連接數(shù),work_connectins * worker_processes = maxConnection;# 要注意maxConnections不等同于可響應(yīng)的用戶數(shù)量,# 因?yàn)橐话阋粋€(gè)瀏覽器會(huì)同時(shí)開(kāi)兩條連接,如果反向代理,nginx到后端服務(wù)器的連接也要占用連接數(shù)# 所以,做靜態(tài)服務(wù)器時(shí),一般 maxClient = work_connectins * worker_processes / 2# 做反向代理服務(wù)器時(shí) maxClient = work_connectins * worker_processes / 4# 這個(gè)值理論上越大越好,但最多可承受多少請(qǐng)求與配件和網(wǎng)絡(luò)相關(guān),也可最大可打開(kāi)文件,最大可用sockets數(shù)量(約64K)有關(guān)worker_connections65535;# 指明使用epoll 或 kquene (*BSD)use epoll;# 備注:要達(dá)到超高負(fù)載下最好的網(wǎng)絡(luò)響應(yīng)能力,還有必要優(yōu)化與網(wǎng)絡(luò)相關(guān)的linux內(nèi)核參數(shù)}http {? ? include? ? ? mime.types;? ? default_type? application/octet-stream;#log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '#? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '#? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';# 關(guān)閉此項(xiàng)可減少IO開(kāi)銷,但也無(wú)法記錄訪問(wèn)信息,不利用業(yè)務(wù)分析,一般運(yùn)維情況不建議使用access_log off# 只記錄更為嚴(yán)重的錯(cuò)誤日志,可減少IO壓力error_log logs/error.log crit;#access_log? logs/access.log? main;# 啟用內(nèi)核復(fù)制模式,應(yīng)該保持開(kāi)啟達(dá)到最快IO效率sendfile? ? ? ? on;# 簡(jiǎn)單說(shuō),啟動(dòng)如下兩項(xiàng)配置,會(huì)在數(shù)據(jù)包達(dá)到一定大小后再發(fā)送數(shù)據(jù)# 這樣會(huì)減少網(wǎng)絡(luò)通信次數(shù),降低阻塞概率,但也會(huì)影響響應(yīng)及時(shí)性# 比較適合于文件下載這類的大數(shù)據(jù)包通信場(chǎng)景#tcp_nopush? ? on; 在 #tcp_nodelay on|off on禁用Nagle算法 #keepalive_timeout? 0;# HTTP1.1支持持久連接alive# 降低每個(gè)連接的alive時(shí)間可在一定程度上提高可響應(yīng)連接數(shù)量,所以一般可適當(dāng)降低此值keepalive_timeout? 30s;# 啟動(dòng)內(nèi)容壓縮,有效降低網(wǎng)絡(luò)流量gzip on;# 過(guò)短的內(nèi)容壓縮效果不佳,壓縮過(guò)程還會(huì)浪費(fèi)系統(tǒng)資源gzip_min_length1000;# 可選值1~9,壓縮級(jí)別越高壓縮率越高,但對(duì)系統(tǒng)性能要求越高gzip_comp_level4;# 壓縮的內(nèi)容類別gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;# 靜態(tài)文件緩存# 最大緩存數(shù)量,文件未使用存活期open_file_cache max=65535inactive=20s;# 驗(yàn)證緩存有效期時(shí)間間隔open_file_cache_valid 30s;# 有效期內(nèi)文件最少使用次數(shù)open_file_cache_min_uses2;? ? server {? ? ? ? listen80;? ? ? ? server_name? localhost;? ? ? ? charset utf-8;#access_log? logs/host.access.log? main;location / {? ? ? ? ? ? root? html;? ? ? ? ? ? index? index.html index.htm;? ? ? ? }#error_page? 404? ? ? ? ? ? ? /404.html;# redirect server error pages to the static page /50x.html#error_page500502503504/50x.html;? ? ? ? location = /50x.html {? ? ? ? ? ? root? html;? ? ? ? }...}...}

下面這篇文章講解了nginx監(jiān)控后端接口健康情況:

http://blog.csdn.net/moqiang02/article/details/42846221

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.簡(jiǎn)介: ? Nginx:engine X ,2002年,開(kāi)源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 2,014評(píng)論 0 3
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 974評(píng)論 0 4
  • 大多數(shù)的Nginx安裝指南告訴你如下基礎(chǔ)知識(shí)——通過(guò)apt-get安裝,修改這里或那里的幾行配置,好了,你已經(jīng)有了...
    錯(cuò)位的季節(jié)閱讀 393評(píng)論 0 1
  • 大多數(shù)的Nginx安裝指南告訴你如下基礎(chǔ)知識(shí)——通過(guò)apt-get安裝,修改這里或那里的幾行配置,好了,你已經(jīng)有了...
    Uzero閱讀 1,092評(píng)論 0 5
  • 大多數(shù)的Nginx安裝指南告訴你如下基礎(chǔ)知識(shí)——通過(guò)apt-get安裝,修改這里或那里的幾行配置,好了,你已經(jīng)有了...
    帥T閱讀 329評(píng)論 0 2

友情鏈接更多精彩內(nèi)容