Nginx实用教程(二):配置文件入门

Nginx配置文件结构

 nginx配置文件由指令(directive)整合,指令分为二种方式,轻巧指令和区块指令。

一条轻易指令由指令名、参数和结尾的支行(;)组成,比方: listen 80
backlog 4096;
,其中“listen”是指令名,“80”、“backlog”、“4096”都以参数,“;”表示指令结尾。

区块指令由指令名、参数和花括号({})组成,举个例子: location /imag {}
,个中“location”是指令名,“/imag”是参数,“{}”用于包罗别的指令和象征最后。假诺二个区块指令中的大括号能够包罗别的轻松指令或区块指令,那么这种区块指令称为“语境(context)”,大多数常用的区块指令都是“语境”。

不被其余别的区块指令满含的命令被以为处于main语境中,即main语境是nginx配置文件中最外层语境,任何命令都位居main语境或main语境的子级语境中。请看上面包车型大巴陈设文件例子:

 1 # nginx.conf
 2 worker_processes 2;
 3 events {
 4     use epoll;
 5     worker_connections 1024;
 6 }
 7 http {
 8     include       mime.types;
 9     upstream server_group_a {   
10       server 192.168.1.1:8080;
11       server 192.168.1.2:8080;
12     }
13     server {
14         listen       80;
15         server_name  www.example.com;   
16         location / {
17            proxy_pass  http://server_group_a;        
18         } 
19     }
20 }

上例中,worker_processes、event、http指令处于main语境中,use、worker_connections指令位于event语境中,include、upstream、server指令位于http语境中,两条server指令位于upstream语境中……

nginx软件是由各个不一致功能的模块组合的,由此配置文件也依照这种模块化的结构,nginx宗旨模块提供部分大局的配备指令,成效配置指令则由其他的效能模块提供。上例中的worker_processes、event指令都由nginx的中央模块提供,而http指令由http功用模块提供,proxy_pass指令则由http模块的一个子模块提供。

在安装nginx时,默许包蕴了一些常用作用模块,使用者也得以通过源码编写翻译安装的不二诀窍自由采用安装任何功用模块,在配置nginx时能够搜索成效模块的文书档案,文书档案中会表达这一个成效模块满含哪些指令,以及那些指令应该在什么语境下陈设,而从语境(指令)查找它含有怎么着能够配备的一声令下却是不可靠的,因为设置的模块分歧,包蕴的下令也差异,因而配置nginx需求有一点点经验,初入门者只可以先从仿效外人的以身作则伊始。

功效模块除了http外,还应该有mail(邮件代理)、stream(TCP、UDP代理,v1.9.0之后)那四个成效模块

 

全局配置指令

  • 语法:include file | mask;
  • 默认值:无
  • 语境:任意

可在放肆语境中使用,将别的安顿文件中的指令引进到使用include指令的语境中。被引进的授命要求符合语法和引进的语境须求。举个例子:

http {
    include mime.types;
    include vhosts/*.conf;
}

将mime.types和vhosts目录下以“.conf”结尾的文本引进到http语境中。

 

  • 语法:deamon on | off;
  • 默认值:deamon on
  • 语境:main

钦定nginx是还是不是以守护进度运营。

 

  • 语法:debug_points abort | stop;
  • 默认值:无
  • 语境:main

用以debug,判定nginx内部错误,特别是推断专门的工作中经过的socket溢出标题。nginx代码中包罗了一部分调节和测量试验点,假设debug_points设置为abord,当运维到调节和测量检验点时会发生叁当中央运转新闻dump文件,当设置为stop时会截止进度。

 

  • 语法:error_log file [level]
  • 默认值:error_log logs/error.log error;
  • 语境:main, http, mail(v1.9.0后), stream(v1.7.11后), server,
    location

点名日志文件和日志品级。

file能够是点名的文本,也足以是行业内部错误输出文件stderr、syslog服务器或内部存款和储蓄器。输出到syslog服务器使用“syslog:”前缀,输出到循环内部存款和储蓄器缓冲区使用“memory:”前缀和缓冲区大小。

level参数钦赐输出日志的品级,高于钦命等第的日记将被输出。帮忙的品级从低到高依次有:debug、info、notice、warn、error、crit、alert、emerg。

点名debug品级供给编写翻译时设置了debug模块。

 

  • 语法:env variable[=value];
  • 默认值:env TZ;
  • 语境:main

暗许情状下,nginx只会继续TZ这一个意况变量,那条指令可以将情状变量传递到nginx进度中,也能够定义新的变量传递到nginx进程中。

 

  • 语法:load_module file;
  • 默认值:无
  • 语境:main

载入动态模块。比如:

load_module module/ngx_mail_module.so;

 

  • 语法:lock_file file;
  • 默认值:lock_file logs/nginx.lock;
  • 语境:main

nginx使用锁的机制来达成accept_mutex功能和分享内部存款和储蓄器,大繁多操作系统中锁都以四个原子操作,这种情状下那条指令无效,还应该有局地操作系统中应用“锁文件”的的编写制定来贯彻锁,此命令用来钦赐锁文件前缀名。

 

  • 语法:master_process on | off;
  • 默认值:master_process on;
  • 语境:main

是还是不是启用worker进度,借使设置为off,则不启用worker进度,由master进度管理供给。

 

  • 语法:pcre_jit on | off;
  • 默认值:pcre_jit off;
  • 语境:main

在剖判配置文件时对正则表达式启用或剥夺实时编写翻译(PCRE JIT)。

RCRE JIT能鲜明晋级正则表达式的管理速度。

JIT重视PCRE库8.20事后版本,并且在编写翻译时索要钦定–enable-jit参数。也足以将PCRE库作为nginx的模块编写翻译安装(编写翻译nginx钦定–with-pcre=参数),并在编写翻译时钦定–with-pcre-jit参数启用JIT功能。

 

  • 语法:pid file;
  • 默认值:pid nginx.pid;
  • 语境:main

钦点pid文件。pid文件存放了master进程的进度号。

 

语法:ssl_engine device;

默认值:无

语境:main

借使运用了硬件ssl加速器材,使用此命令钦赐。

 

  • 语法:thread_pool name threads=number [max_queue=number];
  • 默认值:thread_pool default threads=32 max_queue=65535;
  • 语境:main

在采用异步IO的场所下,定义命名线程池,并设置线程池大小和等候队列大小。当线程池中颇具线程都忙不迭时,新任务会放在等待队列中,假若等待队列满了,职分会报错退出。

命名线程池能够定义多少个,供http模块的异步线程指令(aio)调用。

此命令在v1.7.11中出现。

 

  • 语法:timer_resolution interval;
  • 默认值:无
  • 语境:main

安装时间精度,裁减worker进度调用系统时间函数的次数。私下认可情形下,每当中央事件都会调用gettimeofday()接口来收获系统时间,以便nginx总计连接超时等工作,此命令钦点更新时间的区间,nginx在间隔时间内只调用一遍系统时间函数。

 

  • 语法:user user
    [group];
  • 默认值:user nobody nodoby;
  • 语境:main

点名master运转worker进度使用的linux用户和组。固然组(group)未有点名,那么会暗许用二个和user同名的组名。

 

  • 语法:worker_processes number | auto
  • 默认值:worker_processes 1
  • 语境:main

钦赐worker进度的多少。进度数最棒是CPU宗旨数或CPU宗旨数的翻番。当设置为auto时,nginx会尝试自动获取CPU主旨数并安装。

auto参数从v1.3.8和v1.2.5版本之后帮衬。

 

  • 语法:worker_cpu_affinity cpumask …;
  •    worker_cpu_affinity auto [cpumask];
  • 默认值:无
  • 语境:main

将worker进度绑定到CPU大旨,每一个worker进程对应多个二进制掩码,掩码的每一人对应二个CPU。暗中认可意况下,worker不与cpu焦点绑定。此命令只适用于Linux和FreeBSD。

举例:

worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

代表有4个worker进度,第五个绑定到CPU0,第一个绑定到CPU1,就那样类推,4个经过分别绑定二个CPU大旨。

再例:

worker_processes 2;
worker_cpu_affinity 0101 0101;

代表将率先个经过绑定到CPU0/CPU2,第4个worker进度绑定到CPU1/CPU3,那一个事例适用于超线程场景,即一个核心设想出八个CPU线程。

值auto(v1.9.10)允许自动和可用的CPU绑定:

worker_process auto;
worker_cpu_affinity auto;

掩码(mask)可用用于限制某个CPU参与绑定。举例:

worker_cpu_affinity auto 01010101;

只有CPU0/2/4/6加入绑定,其余的CPU不分配worker进度。

 

  • 语法:worker_rlimit_core size;
  • 默认值:无
  • 语境:main

为worker进度修改系统大旨转储文件(core
file)的大大小小限制。常常提高这几个值无需重启主进度。

 

  • 语法:worker_rlimit_nofile number;
  • 默认值:无
  • 语境:main

修改worker进程最大可张开句柄数限制。日常进步这么些值无需重启主进度。

 

  • 语法:worker_shutdown_timeout time;
  • 默认值:无
  • 语境:main

此命令在v1.11.1第11中学出现。用于安装安全地终结一个worker进度的逾期时间。

当安全甘休三个worker进度时,会停下对worker进程分配新连接,并等待他管理完当前的职分后再脱离,假设设置了晚点时间,超时后nginx会强制关闭worker进度的连日。

 

  • 语法:working_directory directory;
  • 默认值:无
  • 语境:main

钦赐暗中认可专门的职业路子。首要用来worker进度导出内部存款和储蓄器转储文件,为worker进度钦点的用户必要有改文件的写入权限。

 

一而再管理调整指令

  • 语法:events { … }
  • 默认值:无
  • 语境:main

成效只是开采一个发令区块,events语境中配备的指令用于调节连接管理作为。

 

  • 语法:accept_mutex on | off;
  • 默认值:accept_mutex off;
  • 语境:events

当启用那么些参数时,会使用互斥锁交替给worker进度分配新连接,不然话全数worker进程会争抢新连接,即或促成所谓的“惊群难点”,惊群难题会使nginx的空余worker进度无法进去休眠状态,形成系统财富占用过多。启用此参数会断定水准上导致后台服务器负荷不平均,不过在高并发的情景下,关闭此参数能够抓实nginx的吞吐量。

在援救epoll的操作系统上不必要启用accept_mutex(v1.11.3后),使用了reuseport功能也没有供给启用(v1.9.1后,供给操作系统帮助SO_REUSEPORT
socket选项,Linux 3.9+)。

在v1.11.3在先版本中,暗中认可值为on。

 

  • 语法:accept_mutex_delay time;
  • 默认值:accept_mutex_delay 500ms;
  • 语境:events

如果accept_mutex参数启用,当二个空闲worker进程尝试得到互斥锁时开掘有另叁个worker进度已经获得互斥锁并管理新连接,这一个空闲的worker进程等待下一回拿走互斥锁尝试的日子。而得到互斥锁的经过在拍卖完当前一连后,会登时尝试获得互斥锁,因而此数值十分大或三番五次压力较时辰,会促成一部分worker进度总是空闲,一部分历程总是应接不暇的意况。

 

  • 语法:debug_connection address | network | unix:;
  • 默认值:无
  • 语境:events

亟需debug模块协理,需确认安装时包括了debug模块,可以应用nginx
-V命令分明饱含–wih-debug参数。

对特定的客户发起的一而再开启debugging品级日志,用于解析和拍错。能够钦赐IPv4大概IPv6地址(v1.3.0,v1.2.1)或二个无类网段或域名,或UNIX
socket(v1.3.0,v1.2.1)。比如:

events {
    debug_connection 127.0.0.1;
    debug_connection localhost;
    debug_connection 192.168.2.0/24;
    debug_connection 2001:0db8::/32;
    debug_connection unix:;
}

非内定连接的日志品级如故由error_log一声令下决定。

 

  • 语法:multi_accept on | off;
  • 默认值:multi_accept off;
  • 语境:events

当设置为off时,二个worker进度获得互斥锁时一回只管理二个新连接,假如设置为on,则三次性将兼具新连接都分配给拿走当前互斥锁的worker进程、当使用kqueue连接管理格局时(use
kqueue),此项命令无效。

 

  • 语法:use method;
  • 默认值:无
  • 语境:events

点名连接管理方式,平日没有要求钦点,nginx会自动使用最低价的章程。

总是管理格局用于决定用什么样办法从当前的连接池中搜索哪些连接已经希图好传输/接收数据。常见的连接管理格局有:

select(需要select模块)、poll(需要poll模块)、kqueue(macOS/FreeBSD
4.1+/OpenBSD 2.9+)、epoll(Linux 2.6+)、/dev/poll(Solaris 7 11/99+,
HP/UX 11.22+ (eventport), IRIX 6.5.15+, and Tru64 UNIX
5.1A+)、eventport(Solaris 10+)

 

  • 语法:worker_aio_requests number;
  • 默认值:worker_aio_requests 32;
  • 语境:events

在v1.1.4和1.0.7中冒出。当启用aio(异步IO)和epoll连接管理格局后,单个worker进度最大的未成功异步IO操作数。

 

  • 语法:worker_connections number;
  • 默认值:worker_connections 512;
  • 语境:events

单个worker进度可管理的最大并发连接数限制。

其延续接数包蕴和后台服务器之间的接连在内的装有的接连,而不独有是与客户的连接。全体worker进度的总连接数(即worker_connections
×
worker_processes
)无法超越操作系统最大可展开句柄数的范围(nofile),nofile限制能够通过worker_rlimit_nofile命令修改。

 

若是以为本文对你有帮助,请扫描后边的二维码给予捐献,您的支撑是小编继续写出越来越好作品的引力!

图片 1

相关文章