Nginx大併發優化實戰

文章知識點:

  • [ ] 調優的必要性 javascript

  • [ ] 調優的維度和看法分歧css

  • [ ] Nginx調優項

1、調優的必要性

​ 一直不肯意寫優化的內容出來分享,實在是不知道該如何取寫。由於,寫很差就會被各類慰問,今天終於仍是寫了,由於有太多人私信或在羣裏問我或者讓給分享經驗,我仍是從了。前端

​ 在聊調優以前,咱們先要知道爲什麼調優,業務運行和調優的關係。java

Nginx大併發優化實戰

  1. 業務運行:線上業務正常運行,承載了公司業務。
  2. 監控業務:經過監控業務對線上業務進行監控,及時發現問題。
  3. 優化業務:經過監控分析,發現業務問題或者瓶頸,及時對業務或者軟件就行調整、優化。
  4. 測試優化:優化完成後,須要對現有的優化進行測試,保證業務在當前優化模式中穩定、高效,可以解決當前問題。

這就是業務運行的一個流程,也是咱們保證業務穩定、高效、高可用的運維之道。nginx

2、調優的維度和看法分歧

​ 調優類的文章是最難寫的,由於我只能告訴你調優的選項,沒法告訴你具體的閾值,由於不一樣的業務運行在不一樣的機器,所消耗的資源是不一樣的;又由於場景不一樣,對應的調優項及閾值是變幻無窮的,就比如你和你上鋪的兄弟都是感冒了,去醫院看病開的藥倒是大相徑庭的。正是如此,纔會出現當不少人看到調優的文章,看到了具體的調優項或者閾值就會浮現出兩個字,我很差意思說,配個圖吧!你們意會就好。shell

Nginx大併發優化實戰

3、Nginx調優

  • nginx併發數
  • nginx進程優化
  • nginx壓縮
  • nginx本地緩存

一、nginx併發數設置

worker_processes 1;後端

這是用來配置nginx啓動幾個工做進程的,默認爲1。而nginx還支持一個名爲worker_cpu_affinity的配置項,也就是說,nginx能夠爲每一個工做進程綁定CPU。我作了以下配置:瀏覽器

events {
        worker_connections  1024;
}

二、nginx將進程綁定在固定核

worker_cpu_affinity 0010 0100 1000;緩存

worker_processes  3;
worker_cpu_affinity 0010 0100 1000;
#這裏0010 0100 1000是掩碼,分別表明第二、三、4顆cpu核心。

重啓nginx後,3個工做進程就能夠各自用各自的CPU了。
ps -eo psr,pid,arg 查看服務器

nginx的併發=worker_processes*worker_connections

三、nginx 壓縮功能

壓縮功能對於WEB服務器來講過重要了,主要體如今如下兩個方向:

​ 1)提高用戶體驗:傳輸數據變小,用戶等待時間變短。

​ 2)節省公司帶寬成本:壓縮後傳輸,傳輸數據變小,帶寬佔用的更少。

既然能給用戶好的體驗,又能給公司省錢。這麼好的事情何樂不爲呢,因此這個是工做中必備配置神器。

可是配置壓縮須要更你們說一下注意事項:

​ 1)圖片、音視頻不要壓縮

​ 2)小於1K的不要壓縮,不然越壓越大

​ 3)壓縮級別越大,就越消耗CPU

未開啓壓縮

Nginx大併發優化實戰

開啓壓縮

代碼以下:

gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6].";
gzip_proxied any;
gzip_min_length 1024;
gzip_buffers 4 8k;
gzip_comp_level 3;
gzip_types text/plain text/css application/x-javascript application/javascript application/xml;

gzip on;      (啓用 gzip 壓縮功能)

gzip_http_version 1.1; 它的默認值是HTTP/1.1,就是說對HTTP/1.1協議的請求才會進行gzip壓縮

gzip_disable "MSIE [1-6].";設置是禁用IE1-6版本的gzip壓縮

gzip_proxied any;  (nginx 作前端代理時啓用該選項,表示不管後端服務器的headers頭返回什麼信息,都無條件啓用壓縮)

gzip_min_length  1024; (最小壓縮的頁面,若是頁面過於小,可能會越壓越大,這裏規定大於1K的頁面才啓用壓縮)

gzip_buffers     4 8k; (設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流  按照原始數據大小以8K爲單位申請4倍內存空間)

gzip_comp_level 3; (壓縮級別,1壓縮比最小處理速度最快,9壓縮比最大但處理最慢,同時也最消耗CPU,通常設置爲3就能夠了)

gzip_types       text/plain text/css application/x-javascript application/javascript application/xml; (什麼類型的頁面或文檔啓用壓縮)

開啓壓縮驗證

Nginx大併發優化實戰

四、nginx 本地緩存功能

​ 瀏覽器緩存(Browser Caching) 是爲了加速瀏覽並節約網絡資源,瀏覽器在用戶磁盤上對最近請求過的文檔進行存儲。

​ 客戶端緩存和壓縮有本質的區別,用戶第一次下載數據後會被保存在客戶本地硬盤,下次在使用的時候,只要本地資源沒有過時,就直接從本地硬盤讀取了,速度最快,由於不用去找WEB服務器拿數據了。一樣它優化了用戶體驗和節省了公司帶寬成本

須要注意的是:

​ 緩存通常緩存的是圖片、網站框架、音視頻等不常變化的數據。應用最好的就是百度首頁,你們有沒有發現有時候你沒網都能打開百度首頁啊,那就是看的你本地緩存。

nginx本地緩存配置指令

nginx能夠經過 expires 指令來設置瀏覽器的Header
語法: expires [time|epoch|max|off]
默認值: expires off
做用域: http, server, location

使用本指令能夠控制HTTP應答中的「Expires」和「Cache-Control」的頭標,(起到控制頁面緩存的做用)。
能夠在time值中使用正數或負數。「Expires」頭標的值將經過當前系統時間加上您設定的 time 值來得到。

epoch 指定「Expires」的值爲 1 January, 1970, 00:00:01 GMT。
max 指定「Expires」的值爲 31 December 2037 23:59:59 GMT,「Cache-Control」的值爲10年。
-1 指定「Expires」的值爲 服務器當前時間 -1s,即永遠過時

緩存案例

圖片緩存30天
location ~.*\.(jpg|png|jpeg)$
   {
  expires 30d;
  }

js css緩存一小時
location ~.*\.(js|css)?$
   {
  expires 1h;
  }

緩存驗證

Nginx大併發優化實戰

相關文章
相關標籤/搜索