五、nginx模块配置详解
daemon on | off 默认on
- 是否以守护进程的方式运行nginx,守护进程是指脱离终端并且在后头运行的进程,关闭守护进程执行的方式可以让我们方便调试nginx
master_process on | of 默认on
- 是否以master/worker方式进行工作,在实际的环境中 nginx是以一个master进程管理多个worker进程的方式运行的,关闭后 nginx就不会fork出worker子进程来处理请求,
是用master进程自身来处理请求
- worker_processes number; 默认1
在master/worker运行方式下 worker进程的数目,一般情况下用户要配置与CPU内核数相等的worker进程
- worker_cpu_affinity cpumask[cpumask…]
- 示例:worker_cpu_affinity 1000 0100 0010 0001;
绑定worker进程到指定的cpu内核,每一个worker进程都独享一个CPU,可以在内核的调度策略上实现完全的并发
- worker_limit_nofile,默认为操作系统的限制
该值为worker进程可以打开的最大文件描述符的数量
events模块
- events模块包含了nginx了有关连接处理的配置
- worker_connections
设置一个worker能够同时打开的最大连接数,该值最大为- - -----
- worker_rlimit_nofile的值
在nginx作为http服务器的时候,最大连接数为worker_processes
- worker_connctions
在nginx作为反向代理服务器的时候,最大连接数为worker_processes * worker_connections / 2
http模块
- http模块下配置有server location upstream等不同的内容
log_format
- log_format指令用于设置日志的记录格式
当nginx位于负载均衡设备,反向代理服务器之后的时候,无法直接获得客户端真实的ip,但是反向代理服务器转发的http头信息中,可以增加X-Forwarded-For信息,记录原有的客户端ip地址和原来客户端请求的服务器地址,这个时候可以通过log_format指令来设置日志格式,将X-Forwarded-For信息打入日志中
server_name
- 由于IP地址的数量有限,因此经常存在多个主机域名对应同一个ip的情况,这个时候可以按照server_name通过server块来定义虚拟主机,每个server块是一个虚拟主机,处理满足相应listen端口
和server_name的请求
- server_name与host的匹配优先级如下
- - 首先选中所有字符串完全匹配的server_name,如www.nginx.org
- - 其次选中通配符在前面的server_name,如*.nginx.org
- - 再次选择通配符在后面的server_name,如www.nginx.*
- - 最后选择使用正则表达式才匹配的server_name,如~^\.testweb\.com$
location
- location会尝试根据用户请求中的URI来匹配设置的表达式 并选中最终结果中的配置来处理用户的请求
- location [=|~|~*|^~|@] / uri / { … }
- =表示把uri作为字符串,与参数中的URI作完全匹配
- ~进行正则表达式匹配的时候,区分大小写
- ~*进行正则表达式匹配的时候,不区分大小写
- ^~表示匹配URI的时候,如果该location是最佳匹配,那么对于匹配这个location的字符串不在进行正则表达式的匹配检测
- 前面什么都没有的时候例如 location /test/my 相等于是普通字符串匹配,按照最大前置的原则匹配
- @表示仅用于nginx服务内部请求之间的重定向,带有@的location不直接处理用户请求
匹配的优先级如下
- 1、如果查询精确的命中了一个使用=前缀的location,那个它将被使用,并结束匹配
- 2、在剩下普通字符串中,将按照最大前缀匹配的原则进行匹配,将结果最后候选结果,如果最终命中的结果使用了^~前缀表示或者它是一个完全匹配,那么它将被使用,并结束匹配
- 3、正则表达式匹配时,按照正则表达式在配置文件中出现的顺序,并且只有匹配到了一条正则local,就不在匹配下面的local了
- 4、如果步骤3命中了一个匹配,那个它将被使用,否则将使用步骤2的候选结果
- (普通字符串和正则字符串的区别 ~和~*前缀表示location是正则字符串,其他前缀和无前缀表示location是普通字符串)
upstream
- Upstream模块是与反向代理,负载均衡相关的模块
- 示例: upstream backend{
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
}
- - 指定了一个叫backend的代理服务器,可以在proxy_pass和fastcgi_pass中使用,默认的负载均衡方式为加权轮询,可以在配置项使用使用ip_hash来使用ip哈希
- - weight指定了每个server的权重默认是1
- - max_fails指定了在fail_timeout(默认是60s)内对后端服务器请求失败的次数,达到次数后会在fail_timeout时间内不再去查询它