首頁  >  文章  >  後端開發  >  Nginx核心配置深入理解

Nginx核心配置深入理解

WBOY
WBOY原創
2016-07-28 08:27:13950瀏覽

原文連結:http://blog.csdn.net/xyang81/article/details/51814787

Nginx的設定是以模組為單位來組織的,每個模組包含一個或多個指令,指令是設定檔中的最小配置單元,一切配置項皆為指令。如http核心模組中的include、default_type、sendfile指令,都屬於http模組。 nginx所有模組中的指令請見官方文件說明:http://nginx.org/en/docs/dirindex.html

<code>注意:以下配置中的“上下文”表示指令可以配置在哪些模块中。
main:顶层配置,约束服务器的行为
</code>

1、伺服器層級核心設定

指令 上下文 语法 默认值 功能描述
user main user nobody nobyd; nobody 以哪个用户权限运行工作线程
daemon main daemon yes; yes nginx是否以守护进程运行
worker_processes main worker_processes number; 1 配置工作进程数。传统的web服务器(如apache)都是同步阻塞模型,一请求一进(线)程模式,当进(线)程数增达到一定程度后,更多CPU时间浪费在线程和进程切换当中,性能急剧下降,所以负载率不高。Nginx是基于事件的非阻塞多路复用(epoll或kquene)模型,一个进程在短时间内就可以响应大量的请求。建议将该值设置<=cpu核心数量,一般高于cpu核心数量不会带来好处,反而可能会有进程切换开销的负面影响。
worker_connections events worker_connections number; 1024 并发响应能力的关键配置值,表示每个进程允许的最大同时连接数。maxConnection = work_connections * worker_processes;一般一个浏览器会同时开两条连接,如果是反向代理,nginx到后服务器的连接数量也要占用2条连接数,所以,做静态服务器,一般maxConnection = work_connections * worker_processes / 2; 做反代理服务器时maxConnection = work_connections * worker_processes / 4;
use events use epoll; 根据不同的平台,选择最高效的连接处理方法 指定处理连接请求的方法。linux内核2.6以上默认使用epoll方法,其它平台请参考:http://nginx.org/en/docs/events.html 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数
worker_cpu_affinity main worker_cpu_affinity cpumask …; 将工作进程绑定到特定的CPU上,减少CPU在进程之间切换的开销。用二进制bit位表示进程绑定在哪个CPU内核。如8内核4进程时的设置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000
worker_rlimit_nofile main worker_rlimit_core size; 受linux内核文件描述符数量限制 设置nginx最大能打开的文件描述符数量。因为Linux对每个进程所能打开的文件描述数量是有限制的,默认一般是1024个,可通过ulimit -n FILECNT或/etc/securit/limits.conf配置修改linux默认能打开的文件句柄数限制。建议值为:系统最大数量/进程数。但进程间工作量并不是平均分配的,所以可以设置在大一些。推荐值为:655350
error_log main, http, mail, stream, server, location error_log 日志文件路径 日志级别; error_log logs/error.log error; 配置错误日志文件的路径和日志级别。日志级别有debug, info, notice, warn, error, crit, alert和emerg几种。nginx的日志使用syslog输出,所以输出的日志格式是有规律的,系统运维人员可以根据日志规则进行查错或统计分析。更多说明请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log
pid main pid 守护进程socket文件路径; pid logs/nginx.pid 配置nginx守护进程ID存储文件路径(不是工作进程)

以上是nginx的頂層配置,管理伺服器層級的行為。更多設定請參考官方文件:http://nginx.org/en/docs/ngx_core_module.html#working_directory

2、HTTP模組核心設定

nginx做為HTTP反向代理伺服器,平常接觸得最多的應該是針對http請求的相關配置了,和http模組有關的所有配置都放在http { ... }配置中。

將外部檔案的內容做為配置拷貝到nginx.conf檔案中。如:include mime.type; 將目前目錄下的mime.type設定檔拷貝到nginx設定檔中。檔案路徑可以是相對路徑或絕對路徑。檔案名稱可以用*來表示通配符。 default_typehttp, server, locationdefault_type mime類型;檔案到後綴的對應關係名稱。配置預設的mime類型,當在types指令中找不到請求的檔案類型時,就使用default_type指定的類型。預設為text/plain類型。 access_loghttp, server, location, if in location, limit_except access_log off;關閉或開啟存取日誌。預設配置為:access_log logs/access.log combined; 表示根據combined定義的日誌格式,寫入logs/access.log檔案中,combined是http模組預設格式。如果定義了buffer和gzip其中一個參數,日誌預設會先寫入快取中,當快取滿了之後,透過gzip壓縮快取中的日誌並寫入文件,啟用了gzip壓縮必須保證nginx安裝的時候添加了gzip模組。快取大小預設為64K。可以設定gzip的1~9的壓縮級別,等級越高壓縮效率越大,日誌檔案所佔用的空間越小,但要求系統效能也越高。預設值是1。 http://nginx.org/en/docs/http/ngx_http_log_module.html#access_loglog_formathttplog_format 格式名稱名稱;a,request等,更多變量請參考:http://nginx.org/en/docs/http/ngx_http_core_module.html#variablessendfilehttp, server, location, if in locationsendfile on | off;啟用核心複製模式。作為靜態伺服器可以提高最大的IO存取速度。傳統的文件讀寫採用read和write方式,流程為:硬碟>> kernel buffer >> user buffer>> kernel socket buffer >>協議棧,採用sendfile文件讀寫的流程為:硬碟>> kernel buffer (快速拷貝到kernelsocket buffer) >>協定棧,很明顯sendfile這個系統呼叫減少了核心到使用者模式之間的切換和資料拷貝次數,直接從核心快取的資料拷貝到協定棧,提高了很大的效率。這篇文章介紹比較詳細:http://xiaorui.cc/?p=1673tcp_nodelayhttp, server, locationopen_file_cacheopen_file_cacheopen_file_cache http, server, locationopen_file_cache off; open_file_cache max=N [inactive=time];預設值為off; 設定最大快取數量,及快取檔案未使用的存活期。建議值:max=655350(和worker_rlimit_nofile參數一致) inactive=20s;cache_min_useshttp, ,,,shttp, ,s,3]> open_file_cache_min_uses number;預設為1,有效期限內檔案最少使有的次數。建議值:2open_file配置虛擬主機的域名,可以指定多個,用空格分隔。預設為空charsethttp, server, location, if in locationcharset charset | offlocation
指令 上下文 語法 功能描述
types http, server, location types { mime型別檔案字尾;}; 設定能處理的檔案類型。如:text/html html htm shtml;
include any include 檔案路徑; 將外部檔案的內容路徑;

access_log path [format [buffersize] [formatz ]] [flush=time] [if=condition]];
定義http訪問日誌的格式,在日誌格式中可以存取http模組的內嵌變量,如果變存在的話,會做為日誌輸出。如:rememememememe >tea
d r
http, server, location off |on;
tcp_nopush http, server, location
keepalive_timeout http, server, location keepalive_time 65; keepalive_time 65;keepalive_time 65;客戶逾時到伺服器建立連接的指定的時間伺服器就會斷開連線。預設為75秒。降低每個連線的alive時間可在一定程度上提高可回應連線數量,所以一般可適當降低此值gziphttp, server, location, if in locationgzip on | off;開啟內容壓縮,可以有效降低客戶端的存取流量和網路頻寬gzip_min_min_le http, server, locationgzip_min_length length;單位為k,預設為20k。內容超過最少長度後才開啟壓縮,因為太短的內容壓縮效果不佳,且壓縮過程還會浪費系統資源。這個壓縮長度會作為http回應頭Content-Length欄位傳回給客戶端。 建議值:1000gzip_comp_levelhttp, server, locationgzip_comp_level 19;gzip_comp_level 19;gzip_typeshttp, server, locationgzip_types mime-type …;1;預設為text/html;。只壓縮html文本,一般我們都會壓縮js、css、json之類的,可以把這些常見的文本資料都配上。如:text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
open_file_cache open_file_cache


open_file_
_cache_valid http, server, location open_cache_validfile time
server server { … } http HTTP伺服器的核心配置,用於配置HTTP伺服器的虛擬主機,可以設定多個
listen listen ip[:連接埠] server 設定虛擬主機監聽的位址和端口,預設監聽本機IP位址和80或8000端口。如果只設定了IP沒設端口,預設使用80端口。如果只設定了端口,沒設定IP預設使用本機IP。詳細設定請參考:http://nginx.org/en/docs/http/ngx_http_core_module.html#listen
server_name server_name domain_name …;server

請求設定🎜>請求設定編碼,和url參數亂碼問題有關。
server, locationlocation [ = | ~ | ~* | ^~ ] uri { … } lo @name @name { … }

http請求中的一個重要配置項,用於配置客戶端請求伺服器url位址的匹配規則。可以設定多個符合規則

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); }); 以上就介紹了 Nginx核心配置深入理解,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:PHP之正規函數下一篇:PHP之正規函數