nginx引數詳解與效能最佳化(-)
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;
}
}
}
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nginx 配置檔案引數詳解Nginx
- Dockerfile - 引數與詳解Docker
- Nginx編譯引數大全 configure引數中文詳解Nginx編譯
- nginx命令:啟動,停止及命令引數詳解Nginx
- Mysql 效能最佳化--基礎引數MySql
- DB2 效能最佳化引數DB2
- MySQL效能引數詳解 - max_connect_errorsMySqlError
- nginx引數調優能提升多少效能Nginx
- 關鍵字引數與非關鍵字引數(可變引數)詳解
- [Nginx] - nginx 基本配置與引數說明(轉)Nginx
- nginx gzip配置引數解讀Nginx
- 新型小米盒子4K配置效能引數詳解
- ajax 引數詳解
- DockerFile引數詳解Docker
- dd引數詳解
- Mysqldump引數詳解MySql
- vmstat 引數詳解
- MySQL-配置檔案my.cnf引數最佳化詳解MySql
- nginx內建變數詳解Nginx變數
- java 之泛型與可變引數詳解Java泛型
- OGG引數詳解
- tar命令引數詳解
- 函式引數詳解函式
- Oracle UNDO引數詳解Oracle
- jqGrid引數詳解
- $.ajax()方法引數詳解
- DataGuard引數配置詳解
- redis info引數詳解Redis
- ES常用引數詳解
- struts配置引數詳解
- 【轉】Cmd引數詳解
- flash wmode引數詳解
- GCC引數詳解(轉)GC
- fstab引數詳解(轉)
- lsblk命令引數詳解
- OPPO A57引數配置詳解樣 OPPO A57引數與圖賞
- Nginx配置效能最佳化(轉)Nginx
- Java垃圾回收機制詳解及效能最佳化詳解。Java