下面我们来分析nginx配置文件的组成:
一.简要介绍:
1.nginx的配置文件分为两个部分:
核心配置段:Main 配置段
对应协议配置段:如http{...}
2.配置指令以分号结尾,语法格式:
directive value1 [value2……]:
支持使用变量:
模块内置变量
自定义变量
set var_name value
3.主配置段指令的类别:
用于调试,定位问题的配置;
正常运行必备配置;
优化性能的配置;
事件相关配置:主控进程以root启动,worker进程是以普通用户运行
二.主配置段文件详解:
A.正常运行的必备配置;
1.user USERNAME[GROUPNAME]
指定运行worker进程的用户和组;
user nginx nginx;
2.pid /path/to/pid_file
指定pid文件
3.worker_rlimit_nofile #;
指定一个进程所能打开最大文件句柄数;
4.worker_rlimit_sigpending #;
指定每个用户能够发往worker进程的信号的数量;
B.优化性能相关配置:
1.worker_processes 1;
启动的worker线程个数;通常为物理CPU核心数减1;
2.worker_cpu_affinity cpumask……;
绑定启动的worker进程到指定的CPU上;
CPU个数<进程数,服务器需要发生进程切换;nginx工作在一个进程响应多个请求的模型下,多个worker进程在没有请求的情况下工作在睡眠态,只有有请求到达后内核调用worker进程到CPU中执行,这样就会造成上下文切换和进程会在CPU上制造缓存,执行完成后worker进程会退出CPU进入睡眠态,缓存失效,而后来进入的worker进程会重新生成缓存,造成服务器性能降低。
可以在系统启动时将除了系统启动的其他CPU隔离出来,绑定worker进程到指定CPU上,CPU的使用权就是特定的worker进程,可以大大提高服务器性能。
cpumask:CPU掩码
0001
0010
0100
1000
如:
worker_cpu_affinity 0000001 00000010 00000100
3.timer_resolution t;
时间解析度,值大些好,越小越精致,但是消耗大,在x86_64系统上可以不设置;
指的是每一次内核调用返回时都会使用gettimeoutday()系统调用来更新nginx的缓存时钟,time_resolution定义每隔多久gettimeoutday更新一次缓存;更新越频繁系统压力越大;
4.worker_priority nice;
让worker以指定nice值工作,-20~19
nice值越高就会优先获取CPU资源;
nginx默认状态下的nice值为0:
[root@www ~]# ps axo pid,command,nice |grep nginx
4530 nginx: master process /usr/ 0
4532 nginx: worker process 0
4613 grep nginx 0
C.事件相关配置:
1.accept_mutex [on|off]
mutex:互斥锁,是否打开nginx的内部负载均衡锁
内部调度用户请求到各worker时用的负载均衡锁,打开时表示让多个worker进程轮流的,序列化的响应新请求;
2.lock_file /path/to/lock_file;
锁文件
3.accept_mutex_delay #ms;
内部的负载均衡锁在接收请求时的请求延迟,一个worker进程为了等待获取互斥锁要等待的时间延迟;
4.use [epoll|rgsig|select|poll]
指明定义使用何种事件模型的;建议让nginx自动选择
5.worker_connections #;
每个worker进程所能响应的最大并发请求数
D.用于调试定位问题:
1.deamon [off|on]
是否以守护进程模式启动nginx,发生问题时关闭所有信息发送到前台
2.master_process [on|off]
是否以master/worker模式来运行nginx,发生问题时关闭,只启动master,让所有请求直接发送给master执行响应;
3.error_log /path/to/error_log level;
错误日志文件及其级别;出于调试的目的,可以使用debug级别,但此级别只有在编译nginx时使用 了--with-debug选项才有效;
--------------------------------------分割线 --------------------------------------
CentOS 6.2实战部署Nginx+MySQL+PHP
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
CentOS 6.3下配置Nginx加载ngx_pagespeed模块
CentOS 6.4安装配置Nginx+Pcre+php-fpm
--------------------------------------分割线 --------------------------------------