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支持下列连接处理方法:
|
翻译: 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/p_w_picpaths/logo.gif
=:精确匹配;
~:正则表达式模式匹配,匹配时区分字符大小写
~*:正则表达式模式匹配,匹配时忽略字符大小写
^~: URI前半部分匹配,不检查正则表达式
事例如下:客户请求的URI及相应的匹配结果
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /p_w_picpaths/ { [ 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/p_w_picpaths/index.html(匹配B及D,但最终匹配到D)
http://www.mytest.com/p_w_picpaths/a.png (匹配B及D,但最终匹配到D)
http://www.mytest.com/p_w_picpaths/a.gif (匹配B及D,但最终匹配到E)
匹配优先级:
(1)字符字面量最精确匹配
(2)正则表达式检索(由第一个匹配到所处理)
(3)按字符字面量
文件路径定义:
1、root path
设置web资源路径;用于指定请求的根文档目录;
location / {
root /www/htdocs;
}
location ^~ /p_w_picpaths/ {
root /web; #相当于目录为/web/p_w_picpaths/a.html
}
#a.html在路径/web/imgages下,访问时为http://www.mytest.com/p_w_picpaths/a.html
2、alias path
只能用于location中,用于路径别名;
location / {
root /www/htdocs;
}
location ^~ /p_w_picpaths/ {
alias /web;#相当于目录为/p_w_picpaths/a.html
}
#a.html在路径/web下,访问时为http://www.mytest.com/p_w_picpaths/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