一.配置文件解读
nginx配置文件主要分为四个部分:
main{ #(全局设置)
http{ #服务器配置
upstream{} #(负载均衡服务器设置)
server{ #(主机设置:主要用于指定主机和端口)
location{} #(URL匹配的设置)
}
}
}
server
继承自http
,location
继承自server
,upstream
即不会继承其他设置也不会被继承。
1.1、main 全局配置
nginx在运行时与具体业务功能无关的一些参数,比如工作进程数,运行的身份等。
user liming;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log /data/nginx/logs/error.log crit;
pid /data/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;
user nginx
: 指定nginx进程使用什么用户启动worker_processes 4
: 指定启动多少进程来处理请求,一般情况下设置成CPU的核数
,如果开启了ssl和gzip应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l
查看CPU核数。worker_cpu_affinity 0001 0010 0100 1000
: 在高并发情况下,通过设置将CPU和具体的进程绑定来降低由于多核CPU切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。error_log logs/error.log
: error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。pid logs/nginx.pid
: 指定进程pid文件的位置
我们可以使用ps -ef | grep nginx
查看master
和worker
的进程,这里有一个master和四个worker:
1.2、events模块
events 模块主要是nginx 和用户交互网络连接优化的配置内容,我们主要看一下两个配置:
events{
use epoll;
worker_connections 65536;
}
use epoll
:是使用事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选。在操作系统不支持这些高效模型时才使用select。worker_connections 65536
:每一个worker进程能并发处理(发起)的最大连接数。
1.3、http服务器
http{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
sendfile on;
keepalive_timeout 60s;
}
include
:是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。该文件也在conf目录中。default_type
:属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式。charset gb2312
: 指定客户端编码格式。sendfile
:实际上是 Linux2.0+以后的推出的一个系统调用,web服务器可以通过调整自身的配置来决定是否利用 sendfile这个系统调用。sendfile是个比 read 和 write 更高性能的系统接口。当 Nginx 是一个静态文件服务器的时候,开启 SENDFILE 配置项能大大提高 Nginx 的性能
。 但是当 Nginx 是作为一个反向代理来使用的时候,SENDFILE 则没什么用。- Nginx 使用
keepalive_timeout
来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。