主頁 > 快速排名 > 常見問題 > 絕對(duì)詳細(xì)!Nginx基本配置、性能優(yōu)化指南

絕對(duì)詳細(xì)!Nginx基本配置、性能優(yōu)化指南

POST TIME:2018-12-03 17:55

 

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

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

我們將修改的唯一文件是nginx.conf,其中包羅Nginx差別模塊的所有設(shè)置。你應(yīng)該能夠在辦事器的/etc/nginx目錄中找到nginx.conf。首先,我們將談?wù)撘恍┤衷O(shè)置,然后按文件中的模塊挨個(gè)來,談一下哪些設(shè)置能夠讓你在大量客戶端拜候時(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否沒有什么差別。

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

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

Events模塊

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

events {

worker_connections 2048;

multi_accept on;

use epoll;

}

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

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

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

use 設(shè)置用于復(fù)用客戶端線程的輪詢方法。如果你使用Linux 2.6+,你應(yīng)該使用epoll。如果你使用*BSD,你應(yīng)該使用kqueue。想知道更多有關(guān)事件輪詢?看下維基百科吧(注意,想了解一切的話可能需要neckbeard和操作系統(tǒng)的課程基礎(chǔ))

(值得注意的是如果你不知道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ò)誤頁面中的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()以及打開關(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ǔ)拜候日志。關(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;

標(biāo)簽:烏魯木齊 林芝 鹽城 東營(yíng) 九江



收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266