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配置

时间: 2024-10-13 03:10:56

Nginx核心配置文件常用参数详解的相关文章

Samba配置文件常用参数详解

Samba配置文件常用参数详解 Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下. smb.conf含有多个段,每个段由段名开始,直到下个段名.每个段名放在方括号中间.每段的参数的格式是:名称=指.配置文件中一行一个段名和参数,段名和参数名不分大小写. 除了[global]段外,所有的段都可以看作是一个共享资源.段名是该共享资源的名字,段里的参数是该共享资源的属性. Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确.使用testparm

httpd-2.2配置文件常用参数详解

ServerRoot "/etc/httpd" 配置httpd进程的根目录(运行目录) PidFile run/httpd.pid 定义httpd的pid文件 Timeout 60 定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接. KeepAlive Off 定义是否启用保持连接,默认关闭状态.由于http是无状态协议,一次请求(建立一次TCP连接)只能获取一个资源,当页面中包含多个资源的时候,就需要多次请求(建立多次TCP连接),这样导致服务器

Samba配置文件常用参数详解-OK

Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下. smb.conf含有多个段,每个段由段名开始,直到下个段名.每个段名放在方括号中间.每段的参数的格式是:名称=指.配置文件中一行一个段名和参数,段名和参数名不分大小写. 除了[global]段外,所有的段都可以看作是一个共享资源.段名是该共享资源的名字,段里的参数是该共享资源的属性. Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确.使用testparm –v命令可以详细的列出smb.

Linux Samba配置文件常用参数详解

目录 1.全局参数 2.共享参数 Samba的主配置文件叫smb.conf,默认在/etc/samba/目录下. smb.conf含有多个段,每个段由段名开始,直到下个段名.每个段名放在方括号中间. 每段的参数的格式是:名称=指.配置文件中一行一个段名和参数,段名和参数名不分大小写. 除了[global]段外,所有的段都可以看作是一个共享资源.段名是该共享资源的名字,段里的参数是该共享资源的属性. Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确.使用命令: #

cat常用参数详解

cat常用参数详解 作者:尹正杰 最近,我的一个朋友对linux特别感兴趣,于是我觉得每天交给他一个命令的使用,这样一个月下来也会使用30个命令,基本的操作他应该是没啥问题啦,接下来让我们看看 今天的命令吧. 还记得我们昨天学的命令吗?让我们一起看看我的目录下有是吗文件或者目录吧: 通过昨天学的命令,我们看出来了log.txt是我最近修改的一个文件,那么如何去看这个文件的内容呢?让我们一起学习cat吧 一.Cat的基本用法就是cat + [参数(这个参数是可以省略的)] + 文件名称. 例如:

find常用参数详解

find常用参数详解 作者:尹正杰 在linux系统中,在init 3模式情况下都是命令行模式,这个时候我们想要找到一个文件的就得依赖一个非常好用的命令find,也是我们要学些的命令哟 再Linux操作系统的世界里,有各个不同的发行版本,redhat,centos,ubantu,suse,debian,fedora等等,我们需要在这些不通的操作系统中找一个文件,那么 我们开始今天的命令吧! 在学find命令之前,我们一起了解一下模糊匹配的命令locate,locate指令和find找寻档案的功能

NFS和mount常用参数详解 本文目录

NFS和mount常用参数详解 本文目录 NFS权限参数配置 mount挂载参数 原始驱动程序的挂载选项. 新驱动程序的挂载选项. 怎样改变已经挂载的NTFS卷的权限? 怎样自动挂载一个NTFS卷? NFS权限参数配置 ro 只读访问 rw 读写访问 sync 所有数据在请求时写入共享 async NFS在写入数据前可以相应请求 secure NFS通过1024以下的安全TCP/IP端口发送 insecure NFS通过1024以上的端口发送 wdelay 如果多个用户要写入NFS目录,则归组写

Nginx总结(八)启用Nginx Status及状态参数详解

前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天简单介绍下如何监控Nginx的状态. 其实要监控Nginx的状态非常简单,它内建了一个状态页,只需修改Nginx配置启用Status即可,对于想了解nginx的状态以及监控nginx非常有帮助. 1. 启用nginx status配置 大概Nginx配置文件,在默认主机里面加上location或者你希

linux命令之ls命令及常用参数详解

1.  ls命令解释 ls英文全称为list,列表列出的意思.作用是列出目录中的内容 2.  命令格式 Ls [参数] [目录] 3.  命令常用参数 不带参数:默认列出目录下的所有文件名 -l:       列出目录下子目录和文件的详细信息(注,ll相当于ls –l) -a:       列出目录下所有东西,包括隐藏的 -t         按最后修改时间排序 -S         按文件大小排序.(大写的S) -r         排序时按倒序. 4.  命令实例 实例一:默认不带参数 其中