您的位置:首页 > 运维架构 > Nginx

nginx一些参数配置详解

2014-05-07 16:46 411 查看
nginx的配置:
正常运行的必备配置:
1、user username [groupname];
指定运行worker进程的用户和组
2、pid /path/to/pidfile_name
nginx的pid文件
3、worker_rlimit_nofile #;
一个worker进程所能够打开的最大文件句柄数;
4、worker_rlimit_sigpending #;
设定每个用户能够发往worker进程的信号的数量;
优化性能相关的配置:
1、worker_processes #;
worker进程的个数;通常应为CPU的物理核心数减1;

2、worker_cpu_affinity cpumask ...; 用于设置每个worker进程所占用的cpu核心个数
如下事例配置所示:8核CPU,其中6个核心分配(邦定)worker进程,8个0代表8核CPU,相应位上的数值为1.
worker_processes 6;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000;
3、ssl_engine device;
ssl硬件加速器的服务器,指定所使用的ssl硬件加速设备;
4、timer_resolution interval;时间解析间隔
默认情况下,每收到一个内核事件,nginx都会调用
gettimeofday()
。使用此指令后,nginx仅在每经过指定的
interval
时间间隔后调用一次
gettimeofday()
。 可以理解为nginx减少产生
gettimeofday()
系统调用的次数,当然在工作进程中也降低定时器的精度。
5、worker_priority nice; 优先级
-20,19之间的值;
nginx进程的工作优先级
注:1,2,5为优化的关键点
事件相关的配置:
1、accept_mutex [on|off]
是否打开Ningx的负载均衡锁;此锁能够让多个worker进轮流地、序列化地与新的客户端建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;
2、lock_file /path/to/lock_file;
lock文件
3、accept_mutex_delay #ms;
accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;
4、multi_accept on|off;
是否允许一次性地响应多个用户请求;默认为Off;
5、use [epoll|rtsig|select|poll];[后面有详解]
定义使用的事件模型,建议让nginx自动选择;
6、worker_connections #;
每个worker能够并发响应最大请求数;
用于调试、定位问题: 只调试nginx时使用
1、daemon on|off;
是否让ningx运行后台;默认为on,调试时可以设置为off,使得所有信息直接输出控制台;
2、master_process on|off
是否以master/worker模式运行nginx;默认为on;调试时可设置off以方便追踪;
3、error_log /path/to/error_log level;
错误日志文件及其级别;默认为error级别;调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能;

连接处理方法

引用至:http://tengine.taobao.org/nginx_docs/cn/docs/events.html#rtsig
nginx支持多种连接处理方法,而哪些处理方法可用则取决于使用的平台。如果平台支持多种方法,那么nginx一般会自动选择最高效的方法。如果需要,也可以使用use指令明确指定连接处理方法。
nginx支持下列连接处理方法:
select
— 标准方法。在平台不支持更高效的方法时,nginx会自动编译此模块。可以使用
--with-select_module
--without-select_module
编译选项强行开启或禁止编译此模块。

poll
— 标准模块。在平台不支持更高效的方法时,nginx会自动编译此模块。可以使用
--with-poll_module
--without-poll_module
编译选项强行开启或禁止编译此模块。

kqueue
— FreeBSD 4.1+、OpenBSD 2.9+、NetBSD 2.0和Mac OS X的高效方法。

epoll
— Linux 2.6+的高效方法。
一些旧的发行版,比如SuSE 8.2,提供了补丁,在2.4内核上支持了epoll方法。
rtsig
— 实时信号,Linux 2.2.19+的高效方法。系统级的事件队列默认有1024个信号的限制。在高负载的服务器上,将此限制上调可能是必须的。调整的方法是改变
/proc/sys/kernel/rtsig-max
内核参数的值。在Linux 2.6.6-mm2上,这个参数不存在,而且每个进程拥有自己的事件队列。每个队列的长度由
RLIMIT_SIGPENDING
所限,并可使用worker_rlimit_sigpending指令修改。
队列溢出时,nginx丢弃这个队列,并回退到
poll
连接处理方法,直到情况恢复正常为止。

/dev/poll
— Solaris 7 11/99+、HP/UX 11.22+ (eventport)、IRIX 6.5.15+和Tru64 UNIX 5.1A+的高效方法。

eventport
— 事件端口,Solaris 10的高效方法。

翻译: cfsego
虚拟主机相关的配置(Server):
1、server {}
定义虚拟主机,nginx支持使用基于主机名或IP的虚拟主机;

2、listen
listen address[:port];
listen port

default_server:定义此server为http中默认的server;假如所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server;
rcvbuf=SIZE: 接收缓冲大小;
sndbuf=SIZE: 发送缓冲大小;
ssl: https server;

3、server_name [...];
server_name可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头);当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较;比较方式:
(1) 先做精确匹配;www.mytest.com
(2) 左侧通配符匹配;*.mytest.com
(3) 右侧通配符匹配;www.mytest.com, www.*
(4) 正则表达式匹配: ~^.*\.mytest\.com$

4、server_name_hash_bucket_size 32|64|128;
为了实现快速主机查找,nginx使用hash表来保存主机名;

5、location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
功能:允许根据用户请求的URI来匹配指定的各location以进行访问配置;匹配到时,将被location块中的配置所处理;比如:http://www.mytest.com/images/logo.gif

=:精确匹配;
~:正则表达式模式匹配,匹配时区分字符大小写
~*:正则表达式模式匹配,匹配时忽略字符大小写
^~: URI前半部分匹配,不检查正则表达式
事例如下:客户请求的URI及相应的匹配结果

location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
http://www.mytest.com/index.html(匹配B) http://www.mytest.com/(匹配A) http://www.mytest.com/documents/index.html(匹配B及C,但最终匹配到C) http://www.mytest.com/images/index.html(匹配B及D,但最终匹配到D)
http://www.mytest.com/images/a.png (匹配B及D,但最终匹配到D) http://www.mytest.com/images/a.gif (匹配B及D,但最终匹配到E)

匹配优先级:
(1)字符字面量最精确匹配
(2)正则表达式检索(由第一个匹配到所处理)
(3)按字符字面量
文件路径定义:
1、root path
设置web资源路径;用于指定请求的根文档目录;
location / {
root /www/htdocs;
}
location ^~ /images/ {
root /web; #相当于目录为/web/images/a.html
}
#a.html在路径/web/imgages下,访问时为http://www.mytest.com/images/a.html

2、alias path
只能用于location中,用于路径别名;
location / {
root /www/htdocs;
}
location ^~ /images/ {
alias /web;#相当于目录为/images/a.html
}
#a.html在路径/web下,访问时为http://www.mytest.com/images/a.html

3、index file ...;
定义默认主页,可以跟多个值;

4、error_page code ... [=[response]] uri;
当对于某个请求返回错误时,如果匹配上了error_page指令中设定的code,则重定向到新的URI中。
error_page 404 /404.html
error_page 404 =200 /404.html #在系统日志中,会显示200的错误(也就是自定义的返回值)

5、try_files path1 [path2 ...] uri;
自左至右尝试读取由path所指定路径,在第一次找到即停止并返回;如果所有path均不存在,则返回最后一个uri;

location ~* ^/documents/(.*)$ {
root /www/htdocs;
try_files $uri /docu/$1 /temp.html;
} http://www.mytest.com/documents/a.html http://www.mytest.com/docu/a.html http://www.mytest.com/temp.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx 参数