nginx引數詳解與效能最佳化(-)

紫翼龍王夜發表於2015-03-06
user:指定nginx worker程式的使用者以及使用者組;
work_processes:是個主模組指令,制定了nginx要開啟的程式數。每個nginx程式平均耗費10M-12M記憶體;根據經驗一般設定一個程式足夠了;如果是多核cpu;建議指定和cpu數量一樣多的程式數;
error_log:是個主模組指令,用來定義全域性錯誤日誌檔案;日誌輸出級別有debug、info、notice、crit可供選擇;其中debug輸出最為詳細,而crit輸出日誌最少;
pid是主模組指令,用來指定程式id的儲存檔案位置;
worker_rlimit_nofile:用於指定一個nginx程式可以開啟的最多檔案描述符數目,這裡是65535;需要使用命令“ulimit -n 65535"來設定;
events指令用來設定nginx的工作模式及連線數上限;
use是事件模組指令;用來指定nginx的工作模式。nginx支援的工作模式有select、poll、kqueue/epool/rtsig和/dev/poll.對於linux作業系統而言,epoll工作模式是首選;
work_connections也是個事件模組指令,用於定義nginx每個程式的最大連線數;預設是1024;最大客戶端連線數由worker_processes和worker_connections決定;
注意:程式的最大連線數受linux系統程式的最大開啟檔案數限制,在執行作業系統命令:"ulimit -n 65535"後worker_connections的設定才生效;

http伺服器配置:
include:是個主模組命令,實現對配置檔案所包含檔案的設定,可以減少主配置檔案的複雜度;
default_type:屬於http核心模組指令,這裡設定預設型別為二進位制流,也就是當檔案型別未定義時使用這種方式;
log_format:是nginx的httplog模組指令,用於指定nginx日誌的輸出格式。main為此日誌輸出格式的名稱;可以在下面的access_log指令中使用;
client_max_body_size:用來設定允許客戶端請求的最大單個檔案位元組數;
client_header_buffer_size:用於指定來自客戶端請求頭的headerbuffer大小。對於大多數請求,1KB的緩衝區大小已經足夠;
keepalived_timeout:用於設定客戶端連線保持活動的超時時間;
client_header_timeout:用於設定客戶端連線保持活動的超時時間;如果超過這個時間,客戶端還沒有傳送任何資料;nginx將返回”request_time_out 408"的錯誤;
client_body_timeout:用於設定客戶端請求主體讀取時間,預設值為60.如果超過這個時間,客戶端還沒有傳送任何資料,nginx將返回"request time out(408)"錯誤;

檢視nginx是否安裝了某個模組,可以使用如下命令:nginx -V進行檢視;

HttpGzip模組配置
下面配置http的gzip模組,這個模組支援線上實時壓縮輸出資料流。要檢視是否安裝了此模組,請使用上面的命令;

引數說明:
          gzip:用於設定開啟或者關閉gzip模組;“gzip on”表示開啟gzip壓縮,實時壓縮輸出資料流;
          gzip_min_length :用於設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的content_length中獲取;預設值是0;不管頁面多大都進行壓縮;建議設定成大於1k的位元組數,小於1k的可能會越壓越大;
         gzip_buffers 4  16k
         gzip_buffers:表示申請4個單位為16k的記憶體作為壓縮結果流快取;預設值是申請與原始資料大小相同的記憶體空間來儲存gzip的壓縮結果;
         gzip_http_version:用於設定識別http協議版本,預設為1.1;
         gzip_comp_level:用來指定gzip壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但是處理速度慢,也比較消耗cpu資源;
         gzip_types用來指定壓縮的型別,無論是否指定,“text/html"型別總是會被壓縮的;
         gzip_vary:選項可以讓前端的快取伺服器快取經過gzip壓縮的頁面,例如,用squid經過nginx壓縮的資料;

負載均衡配置:
         upstream  zylw{
                    ip_hash;
                   server  192.168.10.11:8080;
                   server  192.168.10.12:8080;
                   }
           upstream是nginx的upstream模組;這個模組透過簡單的排程演算法來實現客戶端ip到後端伺服器的負載均衡。
           nginx的負載均衡模組目前支援4種排程演算法,下面進行分別介紹:
                            輪訓排程演算法:預設的排程演算法。每個請求按時間順序逐一分配到不同的後端伺服器,如果後端某臺伺服器當機,故障系統自動剔除,使使用者訪問不受影響;
                            weight:weight值越大,分配到的訪問機率越高;
                            ip_hash:每個請求按照ip的hash結果分配;
                            fair:這是比上面兩個更加智慧的負載均衡演算法。此種演算法可以根據頁面大小和載入時間長短智慧地進行負載均衡;也就是根據後端伺服器的響應時間來分配請求;響應時間段的優先分配;nginx本身是不支援fair的,如果需要使用這種排程演算法,必須下載nginx的upstream_fair模組。
                            url_hash:此方法按訪問url的hash結果進行分配請求,使每個url指向到同一個後端伺服器;可以進一步提高後端快取伺服器的效率。nginx本身是不支援url_hash的,需要安裝nginx的hash軟體包。
          在http upstream模組中,可以透過server指令指定後端伺服器的ip地址和埠,同時還可以設定每個後端伺服器在負載均衡排程中的狀態。常見的狀態有:
                      down:表示當前的server暫時不參與負載均衡;
                      backup:預留的伺服器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因此這臺機器的壓力最輕;
                      max_fails:允許請求失敗的次數,預設是1,當超過最大數時,返回proxy_next_upstream模組定義的錯誤;
                     fail_timeout:在經歷了max_fails次失敗後,暫停服務的時間。max_fails可以和fail_time一起使用;


server虛擬主機的配置:
           下面介紹對虛擬主機的配置:建議將對虛擬主機的配置的內容寫到另外一個檔案中,然後透過include指令包含進來;
           server  {
                  listen  80;
                  server_name       192.168.10.13  www.itpub.com;
                  index   index.html  index.htm  index.jsp;
                  root   /home/xbniao/webapps
                  charset  gb2312;
                access_log  logs/  main;
           }
           server標誌定義虛擬主機的開始;listen用於指定虛擬主機的伺服器斷開;server_name用於指定ip地址或者域名;多個域名之間使用空格分開;index用於設定訪問的預設首頁地址;root指令用於指定虛擬主機的網頁根目錄;這個目錄可以是相對路徑,也可以是絕對路徑;charset用於設定網頁的預設編碼格式;
          access_log   logs/  main;
          access_log     用來指定此虛擬主機的訪問日誌存放路徑,後面的main用於指定訪問日誌的輸出格式;

URL匹配配置:
          url地址匹配是nginx配置中最靈活的部分。location支援正規表示式匹配,也支援條件判斷匹配,使用者可以透過location指令實現nginx對動、靜態網頁的過濾處理;
          所有副檔名為.gif/jpg/png/bmp/swf的靜態檔案交給nginx處理,而expires用來指定靜態檔案的過期時間,這裡是30天;
         location  ~  .*\.(gif|jpg|png|bmp|swf)$ {
                       root   /home/xbniao/xbniao.com;
                       expires  30d;
             }
        以下這段是將upload和html下的所有檔案交給nginx來處理,當然upload和html目錄包含在/home/xbniao/xbniao.com的目錄下;
           location   ~ ^/(upload|html)/ {
                       root  /home/xbniao/xbniao.com;
                       expires   30d;
              }
         在最後這段設定中,location是對此虛擬主機下動態網頁的過濾處理,也就是將所有以.jsp為字尾的檔案都交給本機的8080埠處理;
           location  ~  .*.jsp  {
                      index   index.jsp;
                      proxy_pass  
                    }
        在最後的最後,設定虛擬主機的錯誤資訊返回頁面,透過error_page指令可以定製各種錯誤資訊的返回頁面。在預設情況下,nginx會在主目錄的html目錄中查詢指定的返回頁面。特別需要注意的是,這些錯誤資訊的返回頁面大小一定不要超過512kb;否則會被ie瀏覽器替換為ie預設的錯誤頁面;
         error_page     404         /404.html;
         error_page     500 502   503  504  /50x.html;
        location  =  /50x.html  {
                     root  html;
                     }
     }
}
        

          

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30129545/viewspace-1450640/,如需轉載,請註明出處,否則將追究法律責任。

相關文章