1. 程式人生 > >Nginx配置文件參數

Nginx配置文件參數

固定 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配置文件參數