Nginx核心配置文件常用參數詳解


                    Nginx核心配置文件常用參數詳解

                                        作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

  關於Nginx權威文檔的話童鞋們可以參考Nginx官方文檔介紹:http://nginx.org/en/docs/http/ngx_http_core_module.html。本篇博客只列出來了常用的參數介紹,用這些參數說明來定制化我們自己的nginx的web服務器等等。

 

 

一.正常運行的必備配置
1>.user username [groupname];
  #以那個用戶身份運行,以在configure指定的用戶為准
2>.pid /path/to/pid_filename;
  #指定nginx的pid文件
3>.worker_rlimit_nofile ;
  #指定一個worker進程所能夠打開的句柄數
4>.worker_rlimit_sigpending ;
  #設定每個用戶能夠發往worker進程的信號的數量
 
二.優化性能相關的配置
1>.worker_procrsses 1;
  #work進程的個數 ,通常其數值應該為cpu的物理核心數減1
2>.worker_cpu_affinity cpumask ....;
  0000 #假設有4個CPU,那么就用4個0來進行占位
  0001 #表示第一個CPU
  0010 #表示第二個CPU
  0100 #表示第三個CPU
  1000 #表示第四個CPU
  對應位上使用cpu,要做單獨綁定
  work_procrsses 6; #表示開啟6個進程,6個進程分別綁定在以下的6顆不同的CPU之上。(這種方式可以提升Nginx的性能,但是要注意的是,每個進程綁定了CPU之后,這些CPU仍然可以被系統調用去執行其他的指令,換句話說,這些CPU有可能還是會做上下文切換喲。)
  worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000; #我們使用類似這種方式來綁定上面所指定的6顆CPU.
 
3>.ssl_engine device;
  #在存在ssl硬件加速器的服務器上,指定所使用的ssl硬件加速設備,從而降低對web服務器的系統資源消耗。
4>.timer_resolution t;
  #每次內核事件調用返回時,都會使用gettimeday()來更新nginx緩存時鍾;timer_resolution用於定義每隔多久才會由gettimeday()更新一次緩存時鍾;x86-64系統上,gettimeday()代價已經很小,可以忽略此配置.
5>.worker_priority nice;
  # -20到19之間的值,值越小越優先調用
 
三.跟事件相關的配置
1>.accept_mutex [on|off];
  # 是否打開nginx的負載均衡鎖;此鎖能夠讓多個worker進行輪流地、序列化地與新的客戶端建立連接;而通常當一個worker進程的負載達到其上限的7/8,master就盡可能不將請求調度至worker.
2>.lock_file /path/to/lock_file;
  #定義鎖文件,如果上面的參數為accept_mutex off,那么這個鎖文件就無效啦。
3>.accept_mutex_delay [#ms]
  #使用accept鎖以后,只有一個worker能取得鎖,另一個worker進程為取得accept鎖的等待時長,即用戶建立等待的時間,如果某worker進程在某次試圖取得鎖時失敗了,至少要等待#ms才能在一次請求鎖。默認是500毫秒。
4>.multi_accept [on|off]
  #是否允許一次性地響應多個用戶請求,默認為off。
5>.use [epoll|rtsig|select|poll]
  #指定使用那種事件模型,建議讓nginx自動選擇。
6>.worker_commections
  #每個worker能夠並發響應的最大請求數,如果為代理服務器(因為它需要與客戶端連接,並且將這個連接轉發給后端真正提供服務的服務器喲)的話:worker_rlimit_nofile=worker_commections*2.
 
四.用於調試、定位問題:只調試nginx時使用
1>.daemon [on|off];
  #關閉提供守護進程的模式,是否讓nignx運行於后台;調試時應該為off,使得所有信息直接輸出在控制台,默認為on。
2>.master_process on|off;
  #是否以master/worker(一個master管理多個worker)模式運行nginx,默認為on,調試時可以設置為off(關閉master,至啟動一個master)以方便追蹤。
3>.error_log /path/to/error_log level;
  #錯誤日志文件及其級別,調試時可以使用debug級別,但要求在編譯時必須使用--with-debug啟用debug功能,默認通常為error級別。
 
五.Nginx的http的web功能
1.Nginx的web基本配置格式:
 1 http{ #Nginx的http web功能,並不包含郵件的配置,如果需要nginx支持mail的支持,需要在編譯的時候配置mail模塊喲。  2  directive value; #非虛擬主機的配置和公共選項,需要定義在server之外,http之內  3  ....  4 
 5  server{ #必須使用虛擬機來配置站點:每個虛擬主機使用一個server{}段來配置  6 
 7  }  8  server{  9 
10  } 11  ...... 12 }

 

2.server{}
  定義一個虛擬主機:nginx支持使用基於主機名或IP的虛擬主機
 
3.listen [...]
  a>.listen address[:port] #只監聽指定IP的端口;
  b>.listen prot #監聽主機上的所有IP的端口;
  c>.listen unix:socket #監聽在socket文件上,對於我們而言,這種監聽方式我們不常用;
  d>.default_server #定義此server為http中默認的server;如果所有的server中任何一個listen使用此參數,那么第一個server即為默認server;
  e>.rcvbuf=SIZE #接收緩存大小;
  f>.sndbuf=SIZE #發送緩存大小;
  g>.ssl:https server #必須以ssl建立連接;
 
4.server_name [...];
  server_name可以跟多個主機名,名稱可以使用通配符和正則表達式(通常以~開頭):當nginx收到一個請求時,會取出其首部的server的值,而后跟眾server_name進行比較,比較方式如下:
  a>. 先做精確匹配,如:www.yinzhengjie.org.cn
  b>. 左側通配符匹配,如:*.yinzhengjie.org.cn
  c>. 右側通配符匹配,如:www.*
  d>.正則表達式匹配,如:~^.*\.yinzhengjie\.org.cn$
 
5.server_name_hash_bucket_size 32|64|128
  為了實現快速主機查找,nginx使用hash表來保存主機名,后面的數字表示可以保存的主機名個數。
 
6.location [ =|~|~*|^~] uri { ... }或location @name { ... }
  location是定義請求的上下文的,location可以放在server虛擬主機中也可以放在location之中(也就是location嵌套location)。它允許根據用戶請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理。匹配規則如下:
    a>. =:精確匹配,
    b>.~:正則表達式模式匹配,匹配時區分字符大小寫
    c>.~*:正則表達式模式匹配,匹配時忽略字符大小寫
    d>.^~:只需要前半部分與uri匹配即可,不檢查正則表達式
  匹配的優先級:字符字面量最精確匹配、正則表達式檢索(由多個時,由第一個匹配到的所處理),按字符字面量。
 
 
7.location的文件路徑定義
a>.root path
  設置web資源路徑,用於指定請求的根文檔目錄,從跟開始匹配,當然root這個參數也可以不再location標簽中,但是為了實現對目錄的訪問控制,我們一般把該參數放在location里面喲。如:
1 location / { 2     root /web/htdocs;    #注意,它指的是location的根目錄,用戶訪問的應該是 /web/htdocs下的文件。 3 } 4 location ^~ /images{ 5     root /web;        #它指定的也是跟目錄,用戶訪問的文件應該是/web/images下的文件 6 }
 
b>.alias path
  指定路徑別名,只能用於location中,從最后一個/開始匹配
1 location / { 2     root /web/htdocs;    #注意,它指的是location的根目錄,用戶訪問的應該是 /web/htdocs下的文件。 3 } 4 location ^~ /images{ 5     alias /web;        #注意,alias后面的參數“/web”表示是images的一個別名。也就是說用戶訪問 /web其實就是訪問 /images這個目錄下的文件喲。它是指多一個路徑別名而已。 6 }

 

c>.index file....
  定義默認頁面,可以跟多個值。自左向右匹配。
1 location / { 2     root /web/htdocs;            #注意,它指的是location的根目錄,用戶訪問的應該是 /web/htdocs下的文件。 3  index index.html index.htm; #設置首頁文件的名稱,我們可以設置多個,用空格隔開即可。 4 } 

 

d>..error_page code ... [=[response]] uri
  它是用來錯誤頁面重定向的。簡單的說,當對於某個請求發回錯誤時,如果匹配上了error_page指令中設定的code,則從定向至新的新URI中。它通常放在server虛擬主機配置里面喲。
1 server{ 2     error_page  404              /404.html; #error_page 后面的第一個參數表示返回錯誤狀態,第二個參數是根據第一個參數的返回狀態返回給用戶的文件的路徑。 3     location / { 4  ...... 5  } 6  ...... 7 }    

 

 
e>.try_files path1 [path2...] uri;
他也是一種重定向,它和error_page 相比,其會先進行判斷頁面是否存在,如果不存在,可以給用戶返回默認的頁面。簡單的說,它是自左向右嘗試讀取有path所指定路徑,在第一找到即停止並返回,如果所有path均不存在,則返回最后一個uri
1 location ~* ^/documents/(.*)${ 2         root /www/htdocs 3         try_files $uri  /docu/$1   /temp.html        #它表示當用戶訪問一個路徑是,它會優先去/www/htdocs/documents目前去找這個文件,如果這個目錄中沒有的話,它就會去找 /www/htdocs/docu目錄下去找用戶請求的文件,如果還是找不到的話就會給用戶返回/www/htdocs/temp.html這個文件喲。 4     }
 
8.網絡連接相關的設置
a>.keepalive_timeout time;
  #保持連接的超時時長,默認為65s(nginx-1.12.x版本);
b>.keepalive_requests n;
  #在一次長連接上允許承載的最大請求數;
c>.keepalive_disable [msie6|safari |none];
  #對指定的瀏覽器禁止使用長連接,比如微軟的IE6(msie6),蘋果的瀏覽器(safari ),當然你也可以不做任何禁用(none);
d>.tcp_nodelay on|off ;
  #對keepalive連接是否使用TCP_NODELAY選項,默認是on,TCP為了提高其性能,通常會把多個報文合並在一起傳給對方,我們簡稱為延遲確認;
e>.client_header_timeout time;
  #讀取http請求首部的超時時長;
f>.client_body_timeout time;
  #讀取http請求包體的超時時間;
g>.send_timeout time;
  #發送響應的超時時長;
 
9.對客戶端請求的限制:
a>.limit_except method ...{ ... }
  # 指定范圍之外的其他方法的訪問控制,只能用於location中,用法如下:
1 limit_except GET { 2         allow 172.16.0.0/16;    #表示除了GET方法,想要訪問其他方法,如PUT,DELETE等只允許172.16.0.0/16這個網段。 3  deny all; #表示用戶處理訪問GET方法外,其他的方法默認都是被拒絕的喲。 4     }

 

b>.client_max_body_size size
  #http請求包體的最大值,常用於限定客戶端所能夠請求的最大包體,根據請求首部中的Content-Length來檢查,以避免無用的傳輸。換句話說,這個參數用來限定用戶能上傳文件的大小很有用。
c>.limit_rate speed
  #限制客戶端每秒傳輸的字節數,默認為0,表示沒有限制。
d>.limit_rate_after time
  #nginx向客戶端發送響應報文時,如果時長超過了此處指定的時長,則后續的發送過程開始限速。用limit_rate來實行限速功能。
 
10.文件操作的優化
a>.sendfile on|off;
  #是否啟用sendfile功能
b>.aio on|off;
  #是否啟用aio功能,如果系統支持的話建議啟用。
c>.open_file_cache max=N [incative=time]|off ;
  #是否打開文件緩存功能,
    max:用於緩存條目的最大值,允許打開的緩存條目最大數,當滿兩類以后將根據LRU(最小最少連接數)算法進行置換,
    inactive:某緩存條目在指定時長內沒有被訪問過時,將自動被刪除;通常默認為60s
  緩存的信息包括:
    文件句柄、文件大小和上次修改時間;
    已經打開的目錄結構;
    沒有找到或沒有訪問權限的信息;
d>.open_file_cache_errors on|off
   #是否緩存文件找不到或沒有權限訪問等相關信息
e>.open_file_cache_valid time
  #多長時間檢查一次緩存中的條目是否超出非活動時長,默認為60s
f>.open_file_cache_min_use
  #在inactive指定的時長內被訪問超過此處指定的次數時,才不會被刪除.
 
11.對客戶端請求的特殊處理
a>.ignore_invalid_headers on|off;
  #是否忽略不合法的http首部,默認為on,off意味着請求首部中出現不合規的首部將拒絕響應,只能用於server和http。
b>.log_not_found on|off;
  #用戶訪問的文件不存在時,是否將其記錄到錯誤日志中。
c>.resolver address;
  #指定nginx使用的dns服務器地址。
d>.resolve timeout;
  #指定DNS解析超時時長,默認為30s。
e>.server_tokens on|off;
  #是否在錯誤頁面中顯示nginx的版本號。
 
六.http核心模塊的內置變量:
  $uri:當前請求的uri,不帶參數
  $request_uri:請求的uri,帶完整參數
  $host:http請求報文中host首部;如果請求中沒有host首部,則以處理此請求的主機的主機名代替
  $hostname:nginx服務運行所在主機的主機名
  $remote_addr:客戶端IP
  $remote_port: 客戶端port
  $remote_user:使用用戶認證時客戶端用戶輸入的用戶名
  $request_filename:用戶請求中的URI經過本地root或alias轉換后映射的本地的文件路徑
  $request_method:請求方法
  $server_addr:服務器地址
  $server_name: 服務器名稱
  $server_port:服務器端口
  $server_protocol:服務器向客戶端發送響應時的協議,如http/1.1,http/1.0
  $scheme:在請求中使用的scheme 映射協議本身的協議
  $http_HEADER:匹配請求報文中指定的HEADER,$http_host匹配請求報文中的host首部
  $sent_http_HEADER:匹配響應報文中指定的HERDER,例如$http_content_type匹配相應報文中的content-type首部
  $document_root:當前請求映射到的root配置
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM