Nginx配置文件參數
阿新 • • 發佈:2018-11-21
固定 nor 超時時間 sock 緩存 bytes 讀取 proc exc 具體配置項介紹:
主語句塊配置: Main 全局配置段常見的配置指令分類 正常運行必備的配置 優化性能相關的配置 用於調試及定位問題相關的配置 事件驅動相關的配置 相關配置: 1 user [username groupname]:以哪個用戶的身份運行 2 pid /path/to/pidfile_name:指定nginx的pid文件 註意: 1 進程結束pid文件自動刪除 2 所在路徑應該對所有者開放寫權限 3 include file | mask 指明包含進來的其它配置文件片斷 4 load_module file:模塊加載 模塊加載配置文件:/usr/share/nginx/modules/*.conf 指明要裝載的動態模塊路徑: /usr/lib64/nginx/modules
性能優化相關配置:
1 worker_processes [n]:work進程的個數 註意:設置在主配置段 通常其數值為cpu的物理核心數減1[非固定] auto --自動根據電腦cpu數量生成 具體設置: [root@www19:15:31nginx]#ps aux | grep nginx root 1328 0.0 0.4 120796 2236 ? Ss 19:15 0:00 nginx: master process /usr/sbin/nginx nginx 1329 0.0 0.6 121180 3120 ? S 19:15 0:00 nginx: worker process nginx 1330 0.0 0.6 121180 3120 ? S 19:15 0:00 nginx: worker process nginx 1331 0.0 0.6 121180 3120 ? S 19:15 0:00 nginx: worker process 2 worker_cpu_affinity [cpumask]:把進程綁定到固定cpu 0000:一顆都不用 0001:第0顆cpu 0010:第一顆cpu 0100:第二顆cpu 1000:第三顆cpu 0011:使用第0顆和第一顆cpu 具體用法:設置在主配置段 worker_cpu_affinity 0001 0010 0100 1000; 只能保證這幾個進程各自再一個cpu上運行,並不能保證 cpu上不能運行其他進程 ps axo psr,pid,cmd --查看cpu綁定情況 具體設置: worker_cpu_affinity 0001 0010 0100; 效果: [root@www19:18:22~]#ps axo pid,cmd,psr | grep nginx 1328 nginx: master process /usr/ 2 1374 nginx: worker process 0 1375 nginx: worker process 1 1376 nginx: worker process 2 3 worker_priority [nice值]:nice值越小越優先調用 -20---19之間的值 指定worker進程的nice值,在主配置段設置! 初始nice值都是0: [root@www19:19:42~]#ps axo pid,cmd,psr,ni | grep nginx 1328 nginx: master process /usr/ 2 0 1374 nginx: worker process 0 0 1375 nginx: worker process 1 0 1376 nginx: worker process 2 0 設置nice值: worker_priority 10; 效果: [root@www19:24:21~]#ps axo pid,cmd,psr,ni | grep nginx 1328 nginx: master process /usr/ 3 0 1420 nginx: worker process 0 10 1421 nginx: worker process 1 10 1422 nginx: worker process 2 10 4 worker_rlimit_nofile [n]: 指定一個worker進程所能夠打開的最大文件數 設置在主配置段 每響應一個用戶請求,都會相應的打開一個socket文件 具體設置: worker_rlimit_nofile 10240; 測試: ab -c 1025 -n 4000 http://172.20.23.48/ 這時候是不能成功測試的! 因為打開文件的數量還取決於,系統上默認的設置可以使用: ulimit -a來查看:open files (-n) 1024 更改配置文件:/etc/security/limits.conf <domain> <type> <item> <value> Apache hard nofile 3000 nginx hard nofile 4000 配合ulimit -n [n]:n=限制打開的文件數量 5 ssl_engine device: 再存在ssl硬件加速器的服務器上, 指定所使用的ssl硬件加速設備 6 timer_resolution [n]: 每隔多少時間返回一次-每次內核事件調用,返回時都會使用gettimeofday()這個系統 調用來獲取系統時間,來更新nginx緩存時鐘! 現在x86_64系統上,gettimeofday的代價已經很小,不設置也沒問題
事件驅動相關配置:
1 use [epoll|rtsig|select|poll]; 定義使用的事件模型,建議讓nginx自動選擇 ,linux中一般是epoll 2 worker_connections [n]; 每個worker能夠並發響應的最大請求數 如果是web服務器:這數值要略小於worker_rlimit_nofile [n] 如果是代理服務器,worker_rlimit_nofile [n]應該是這個數值的2倍 和ulimit -a限制的打開文件數有關! 3 accept_mutex [on|off]: 是否打開nginx的負載均衡鎖,此鎖能夠讓多個worker進程 輪流的,序列化的與新的客戶端建立TCP連接,而通常當一個worker 進程的負載達到其上限的7/8時,maseter就盡可能不在將請求調度此worker on--輪流處理請求 off--會通知所有進程,但最終只有一個進程響應,造成"驚群現象"影響性能 4 multi_accept {on|off}; 是否允許一次性地響應多個用戶請求,默認為off 5 accept_mutex_delay [n]毫秒; accept鎖模式中,一個worker進程為取得accept鎖的 等待時長,[如果某worker進程在某次試圖取鎖失敗後只有等待n毫秒後才能再次鎖] 默認是500毫秒
調試|測試相關配置:
1 daemon [on|off];
是否讓nginx運行於後臺默認為on,調試時可以設置為off,使得所有信息直接輸出於
控制臺!設置於主配置段!制作docker鏡像時,需要設置為off
2 master_process[on|off];
是否以一個master管理多個進程的方式運行,默認是on
為了調試追蹤,可以設置off,就不會在有worker進程
3 error_log /path/to/error_log level[級別];
錯誤日誌文件及其級別,調試時可以使用debug級別,但要求編譯時 --with-debug啟用
debug功能!
默認為error級別
編譯安裝時需要--with-debug能支持debug級別
方式:file /path/logfile;
stderr:發送到標準錯誤
syslog:server-address[,parameter=values]:發送到
syslog memory:size 內存
級別:
level:debug|info|notice|warn|error|crit|alter|emerg
網絡相關配置:
1 keepalive_timeout [time];
設置保持連接的超時時間
默認為75秒
0表示禁用
http|server|location
使用telnet測試:
[root@www19:47:59nginx]#telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ‘^]‘.
GET / HTTP/1.1
HOST: 172.20.23.48
HTTP/1.1 200 OK
2 keepalive_requests n;在一次長連接上允許承載的最大請求數;
具體使用:
keepalive_timeout 75;
keepalive_requests 2;
3 keepalive_disables [msie6|safari|none]
對指定的瀏覽器禁止使用長連接
4 tcp_nodelay on|off:
確認延遲,默認是on,
5 client_header_timeout time[秒]
讀取http請求首部的超時時長
6 client_body_timeout time;
讀取http請求包體的超時時長 ,默認60秒
7 send_timeout time;
發送響應的超時時長
8 client_body_buffer_size size;
用於接收每個客戶端請求報文的body部分的緩沖區大小;
默認為16k;超出此大小時其將被暫存到磁盤上的由下面client_body_temp_path指令所定義的位置
9 client_body_temp_path path [level1 [level2 [level3]]];
設定存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量
目錄名為16進制的數字client_body_temp_path /var/tmp/client_body 1 2 2
1 1級目錄占1位16進制,即2^4=16個目錄 0-f
2 2級目錄占2位16進制,即2^8=256個目錄 00-ff
2 3級目錄占2位16進制,即2^8=256個目錄 00-ff
客戶端請求的限制:
1 limit_except 方法:限定指定範圍之外的方法訪問控制[只能用於location]
例子:
limit_except GET {
allow 172.16.0.0/16;
deny all;
}
除了GET以外的方法只允許172.16.0.0/16網絡中的用戶使用!
用戶常用請求方法:
GET -請求獲取一個資源
HEAD-根GET相似,但其不需要服務器發送資源而僅傳回響應首部
POST -提交表單,支持HTML表單提交
PUT -向服務器寫入文檔
DELETE -請求刪除URL指向的資源
OPTIONS -探測服務器端對某資源所支持的請求方法
具體使用:
server {
server_name www.a.com;
listen 80;
root /web/a.com;
index index.html;
server_tokens off;
location /test {
root /www/html;
limit_except PUT {
deny 172.20.23.33;
deny 172.20.23.23;
allow all;
}
}
location /test1 {
alias /mydata/html;
}
}
這樣設置意味著除了PUT以外的方法對172.20.23.33主
機禁止使用
測試:
[root@www21:16:01~]#curl -XGET http://www.a.com/test/
<html>
<head><title>403 Forbidden</title></head>
2 client_max_body_size size;
http請求包體的最大值; 限制用戶上傳文件的大小
根據請求首部中的Content-Length來檢測,以避免無用的傳輸
3 limit_rate 值 單位是bytes/second;
限制客戶端每秒鐘傳輸的字節數
默認為0表示沒有限制;
http|server|location
4 limit_rate_after time;
nginx向客戶發送響應報文時,如果時長超出了此處指定的時長,則後續的發送過程開始限速
多用於下載服務器!
文件操作優化相關:
1 sendfile on|off
是否啟用sendfile功能,高效傳輸文件模式
sendfile: 設置為on表示啟動高效傳輸文件的模式。
sendfile可以讓Nginx在傳輸文件時直接在磁盤和tcp socket之間傳輸數據。
如果這個參數不開啟,會先在用戶空間(Nginx進程空間)申請一個buffer,
用read函數把數據從磁盤讀到cache,再從cache讀取到用戶空間的buffer,
再用write函數把數據從用戶空間的buffer寫入到內核的buffer,
最後到tcp socket。開啟這個參數後可以讓數據不用經過用戶buffer。
2 aio on|off
是否啟用aio,一般要啟用!啟用異步文件
3 open_file_cache max=N [inactive=time] on|off
max=N:緩存條目的最大值
inactive=time:非活動時間,某緩存條目在指定時長時沒有被訪問過時,將自動刪除
默認60秒
是否打開文件緩存功能,當滿了以後將根據LRU算法進行置換
緩存的信息包括:
文件的描述符,文件大小,上次修改時間
已經打開的目錄結構
沒有找到或沒有訪問權限的信息
4 open_file_cache_errors on|off
是否緩存文件找不到或者沒有權限訪問等相關信息
可能會影響更新-默認是off
5 open_file_cache_valid time;
多長時間檢查一次緩存中的條目是否超出非活動時間的 默認60秒
6 open_file_cache_min_use n;
在inactive指定的時長內被訪問超出此處指定的次數時,不會被刪除
7 directio size | off;
當文件大於等於給定大小時,例如directio 4m,同步(直接)寫磁盤,而非寫緩存
對客戶端請求的特殊處理:
1 ignore_invalid_headers on|off
是否忽略不合法的http首部,默認值是on,off意味著請求首部中出現不合規的首部將
拒絕響應
2 log_not_found on|off
是否將文件找不到的信息也記錄到錯誤日誌中!
3 resolver address;
指定nginx使用的dns服務器地址
4 resolver_timeout time;
指定DNS解析超時時長,默認30s
5 server_tokens [on|off];
是否在錯誤頁面中顯示nginx的版本號;一般off
Nginx配置文件參數