基本的Nginx 配置文件由若干个部分组成,每一个模块都是通过如下方法定义的:
<section> {
<directive> <parametrs>;
}
每一个指令行必须由一个分号符结束(;),这标记着一行的结束,缺少启动时会出现配置文件异常。花括号 { } 标识一个新配置的上下文(context),可以理解为配置块、节。
- 全局块: 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成workerprocess数等。
- events块: 配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http块: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- server块: 配置虚拟主机的相关参数,一个http中可以有多个server。
- location块: 配置请求的路由,以及各种页面的处理情况。
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
一、全局块
1、user
设定可以访问的用户或者组 如果不设置默认所有人可以访问 设置可以设置ip 等标识方式
2、worker_processes设定工作组数量,也就是定义Worker 进程启动的数量。这些进程用于处理客户的所有连接。该参数取决于服务器环境、磁盘子系统和网络基础设施。如工作比较消耗CPU,可以设为和CPU核心数量相同;如果要处理很多小文件且文件总大小比内存大很多的1/O密集型负载时,用1.5~2之间乘以这个数。
3、pid
记录主进程ID的文件,一般不需要更改
4、error_log错误日志文件。如果在其他区段中没 有设置其他的 error log,那么这个日志文件将会记录所有的错误。该指令的第二个参数指定了被记录错误的级别( debug、info、 notice、warn、eror、crit、 alert、 emera)。debug级别最低,emera最高。注意debug级别的错误只有在编译时配置了-with- debug选项才可以使用
二、events 块
1、accept_mutex
设置网路连接序列化,开启后可以防止多个进程对连接的争夺。防止惊群现象发生,默认为on(惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能)
2、multi_accept设置一个进程是否同时接受多个网络连接,默认为off一对一 开启后可以一对多 但是你的程序很可能会出现异常
3、use 事件驱动模型支持 select|poll|kqueue|epoll|resig|/dev/poll|eventport。
select模型 Linux和Windows都支持。poll模型是Linux平台上的事件驱动模型,Windows平台不支持该模型。
epoll模型属于poll模型的变种,但是epoll比poll更加高效,原因在于它不需要轮询整个描述符集合,而是Linux内核会关注事件集合,当有变动时,内核会发来通知。Linux环境推荐使用epoll
单个worker 的最大连接数,默认为512,但是常用的时候 一般是 1024 -2048。
Ngixn 的最大连接数 = worker_processes * worker_connections
三、 http块
1、include
使用include 可以增加配置文件的可读性和重复谁用性,使用include引用的文件,必须符合Nginx 的语法规范,然后指定该文件的路径。mime.types 和tomcat的 mime.types 文件内容基本相同,定义了一系列的数据类型,Nginx通过服务器端文件的后缀名来判断这个文件属于什么类型,再将该数据类型写入HTTP头部的Content-Type字段中,发送给客户端。
同时也可以使用通配符引入,例如:include *.confg;
超时时间,表示一个长连接如果在设定的 time 秒内没有传输数据,nginx将会主动的断掉该连接,默认time = 75s