1. 程式人生 > >nginx 配置效能優化

nginx 配置效能優化

nginx是一個高併發web伺服器,所以沒有很好的優化配置可能會產生效能瓶頸與安全問題。

1.隱藏nginx版本號,防止根據某個軟體版本漏洞來攻擊伺服器

 在http模組中新增server_tokens off;

或者在nginx編譯安裝前改掉所有涉及版本號的檔案,具體有哪些檔案有版本號如果不知道很好辦全域性搜尋下,沒有辦不到只有想不到

[[email protected] nginx-1.14.0]# find . -type f | xargs grep '1.14.0'
./src/core/nginx.h:#define nginx_version      1014000
./src/core/nginx.h:#define NGINX_VERSION      "1.14.0"
./CHANGES.ru:Изменения в nginx 1.14.0                                          17.04.2018
./CHANGES:Changes with nginx 1.14.0                                        17 Apr 2018

看搜尋的結果便知道哪個檔案了(CHANGES.ru和CHANGES檔案是軟體更新記錄一個是俄語一個是英文版可以直接忽略這兩個檔案)。

2.nginx程序數(worker_processes)

這個引數一般根據系統cpu數目和cpu核數來決定。 檢視我們的物理cpu總個數

[[email protected] nginx-1.14.0]# grep 'physical id' /proc/cpuinfo | uniq | wc -l
4

檢視我們的cpu總核數(說明我們的系統是每個物理cpu為4核)

[[email protected] nginx-1.14.0]# grep processor /proc/cpuinfo | uniq | wc -l
16

所以這裡worker_processes我們可以設定為4或者為8,16 當然我覺得設定為1-16之間的數也是可以。

我們根據自己伺服器併發量選擇較為合適的。為了能夠合理的分配nginx在cpu的佔用可以指定cpu的序號

worker_processes 4

worker_cpu_affinity  0001 0010 0101000

3.worker_connections 

高併發必然產生高tcp連線數而且nginx預設是60s才斷開連線,每個tcp連線都是一次檔案的開啟,這裡就涉及到系統限制了。

worker_connections 這個引數是單個nginx程序的連線數。這裡就涉及到系統最大控制代碼數 。


檢視系統單程序的最大連線數(這裡系統有的預設1024,阿里雲好像預設都是65535,這裡系統調優不再敘述了日後再寫單獨詳述)

[[email protected] ~]# ulimit -n
65535

所以這裡我們根據系統可設定worker_connections 65535

那麼我們nginx最大併發量就是worker_processes* worker_connections = 262140。

4.事件I/O模型

nginx的連線處理機制不同的作業系統會採用不同的I/O模型,Linux下,nginx使用epoll的I/O多路複用模型,在freebsd使用kqueue的IO多路複用模型,在solaris使用/dev/pool方式的IO多路複用模型,在windows使用的icop。 centos7.0選擇如下模型

events {
use epoll;
}

5.keepalive_timeout

tcp連線失效時間,預設60s,60s後再次請求會經過三次握手。

6.高效檔案傳輸模式

http {
  sendfile    on; 

sendfile引數用於開啟檔案的高效傳輸模式。同時將tcp_nopush和tcp_nodelay兩個指令設定為on,可防止網路及磁碟i/o阻塞,提升nginx工作效率。

7.gzip壓縮

資源壓縮的原理是通過ngx_http_gzip_module模組攔截請求,並對需要做gzip的型別做gzip,ngx_http_gzip_module是Nginx預設整合的,直接開啟即可。

gzip on;                   #表示開啟壓縮功能

gzip_min_length  1k;            #表示允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length中獲取。預設值是0,表示不管頁面多大都進行壓縮,小於1K則不會壓縮

gzip_buffers     4 32k;          #設定壓縮緩衝區大小

gzip_http_version 1.1;           #設定針對http協議版本

gzip_comp_level 9;             #壓縮比率

gzip_types  text/css text/xml application/javascript;  #指定壓縮的型別

gzip_vary on;                #vary header支援