Nginx的優化配置

  Nginx相關的內容有點延遲,趁着今天有空就給大家整理完,本篇文章來給大家把Nginx我們在工作中常用的配置來給大家分享下,希望能對大家有所幫助。

Nginx的優化配置

全局配置

選項 設置
user root root; 默認用戶是nobody,如果nginx需要訪問某些比如root類權限的文件,會提示403錯誤,修改這個可以通過root去訪問
worker_processes 2;
worker_cpu_affinity 01 10
nginx默認是沒有開啓利用多核cpu的配置的。需要通過增加worker_cpu_affinity配置參數來充分利用多核cpu,cpu是任務處理,當計算最費時的資源的時候,cpu核使用上的越多,性能就越好。解釋:01表示啓用第一個CPU內核,10表示啓用第二個CPU內核worker_cpu_affinity 01 10;表示開啓兩個進程,第一個進程對應着第一個CPU內核,第二個進程對應着第二個CPU內核。
error_log /var/log/nginx/error.log warn; 錯誤日誌級別
worker_rlimit_nofile 20480; 更改worker進程的最大打開文件數限制, 如果沒設置的話,這個值爲操作系統的限制, 所以把這個值設高,這樣nginx就不會有“too many open files”問題了。設置了這個後,修改worker_connections值時,是不能超過worker_rlimit_nofile的這個值(其實核心原因就是程序打開的文件/socket鏈接數量超過系統設定值)
use epoll; 使用epoll的I/O模型,這個不用說了吧。{select/pool/kqueue/epool ; select、poll是標準工作模式、kquque、epoll是搞笑工作模式,epoll是用在linux系統。kqueue是用在bsd系統(unix的衍生系統)
worker_connections 20480; nginx默認的併發連接數是1024,如果網站訪問量過大,就需要調整這個值,值越大能夠支撐的併發數也就越大。但是最終的天花板是CPU; 理論上每臺nginx服務器的最大連接數爲worker_processes*worker_connections
accept_mutex off; 當一個新連接到達時,如果激活了accept_mutex,那麼多個Worker將以串行方式來處理,其中有一個Worker會被喚醒,其他的Worker繼續保持休眠狀態;如果沒有激活accept_mutex,那麼所有的Worker都會被喚醒,不過只有一個Worker能獲取新連接,其它的Worker會重新進入休眠狀態,這就是「驚羣問題」。假設你養了一百隻小雞,現在你有一粒糧食,那麼有兩種餵食方法:你把這粒糧食直接扔到小雞中間,一百隻小雞一起上來搶,最終只有一隻小雞能得手,其它九十九隻小雞隻能鎩羽而歸。這就相當於關閉了accept_mutex。你主動抓一隻小雞過來,把這粒糧食塞到它嘴裏,其它九十九隻小雞對此渾然不知,該睡覺睡覺。這就相當於激活了accept_mutex。可以看到此場景下,激活accept_mutex相對更好一些,讓我們修改一下問題的場景,我不再只有一粒糧食,而是一盆糧食,怎麼辦?此時如果仍然採用主動抓小雞過來塞糧食的做法就太低效了,一盆糧食不知何年何月才能喂完,大家可以設想一下幾十只小雞排隊等着餵食時那種翹首以盼的情景。此時更好的方法是把這盆糧食直接撒到小雞中間,讓它們自己去搶,雖然這可能會造成一定程度的混亂,但是整體的效率無疑大大增強了。
include /etc/nginx/mime.types; 這裏我們使用它來加載文件擴展名與文件類型映射表。nginx根據映射關係,設置http請求響應頭的Content-Type值。當在映射表找不到時,使用nginx.conf中default-type指定的默認值。
default_type application/octet-stream; 指定默認類型爲二進制流,也就是當文件類型未 定義時使用這種方式
sendfile on; 開啓高效傳輸模式
keepalive_timeout 60; http連接的超時時間
include extra/*.conf; 通過不同配置文件進行管理

extra/upstream.conf

upstream gupaoedu{
  server   192.168.11.152:8080;
  server   192.168.11.153:8080;
}

extra/vhost.conf

server {
   listen       80;
   server_name  www.gupao.com
   access_log   off;
   error_log    off;
   location / {
      proxy_pass                http://gupaoedu;        #選擇對應的負載均衡配置 
      proxy_read_timeout        60;    #與後端處理機timeout時間一致; 該指令設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應     
      proxy_connect_timeout     60;     #該指令設置與upstream server的連接超時時間,有必要記住,這個超時不能超過75秒
      proxy_send_timeout        60; 這個指定設置了發送請求給upstream服務器的超時時間。超時設置不是爲了整個發送期間,而是在兩次write操作期間。如果超時後,upstream沒有收到新的數據,nginx會關閉連接
      proxy_set_header          Host             $host;  #設置頭信息
      proxy_set_header          X-Real-IP       $remote_addr;   #設置頭信息
   }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章