前言
熟悉nginx的同学应该了解,nginx.conf 配置文件中默认有三大块:全局块、 events 块、 http 块 ,http块中可以配置多个 server 块,每个 server 块又可以配置多个 location块。 本篇对nginx.conf配置文件中的常用指令块做一个较详细的介绍。 全局块
1、user指令

user: 用于配置运行 Nginx 服务器的 worker 进程的用户和用户组

该属性也可以在编译的时候指定,语法如下 ./configure -- user=user --group=group , 如果两个地方都进行了设置,最终生效的是配置文件中的配置。 指令使用目的
使用 user 指令可以指定启动运行工作进程的用户及用户组, 这样对于系统的权限访问控制的更加精细,也更加安全
2、work process指令

正常情况下,当开启nginx服务后,使用ps命令可以看到当前有两个进程
- 其中master_process : 用来指定是否开启工作进程
- worker_processes: 用于配置 Nginx 生成工作进程的数量,这个是 Nginx 服务器实现并发处理服务的关键所在。理论上来说workder process 的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要 受到来自服务器自身的限制,建议将该值和服务器CPU 的内核数保存一 致。
如果将 worker_processes 设置成 2 ,则会看到如下内容 :
3、daemon指令
设定 Nginx 是否以守护进程的方式启动 守护式进程是 linux 后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止
4、pid指令
用来配置 Nginx 当前 master 进程的进程号 ID 存储的文件路径。
该属性可以通过 ./configure -- pid - path=PATH 来指定 5、error_log
用来配置 Nginx 的错误日志存放路径
该属性可以通过 ./configure -- error - log - path=PATH 来指定 其中日志级别的值有: debug|info|notice|warn|error|crit|alert|emerg ,翻译过来为试 | 信息| 通知 | 警告 | 错误 | 临界 | 警报 | 紧急,建议大家设置的时不要设置成info 以下等级,会带来大量的磁盘 I/O 消耗,影响 Nginx 性能; 6、include
用来引入其他配置文件,使 Nginx 的配置更加灵活
events块

events块中可配置的指令包括如下,分别做说明
1、accept_mutex
用来设置Nginx网络连接序列化

这个配置主要可以用来解决常说的 " 惊群 " 问题。大致意思是在某一个时 刻,客户端发来一个请求连接,Nginx 后台是以多进程的工作模式,也就是说有多个worker 进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx 的整体性能。如果将上述值设置为on( 开启状态 ) ,将会对多个 Nginx 进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢; 2、multi_accept
用来设置是否允许同时接收多个网络连接

如果 multi_accept 被禁止了, nginx 一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接;
3、worker_connections
用来配置单个worker进程最大的连接数

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number 值不能大于操作系统支持打开的最大文件句柄数量。 4、user
用来设置 Nginx 服务器选择哪种事件驱动来处理网络消息 
注意:此处所选择事件处理模型是 Nginx 优化部分的一个重要内容,method的可选值有 select/poll/epoll/kqueue 等,之前在准备 centos 环境的时候,我们强调过要使用linux 内核在 2.6 以上,就是为了能使用epoll函数来优化 Nginx 。
另外下面这些值也可以在编译的时候选择使用: -- with - select_module 、 -- without - select_module 、--with - poll_module 、 -- without - poll_module 来设置是否需要将对应的事件驱动模块编译到Nginx 的内核; events 指令配置实例 - events {
- accept_mutex on;
- multi_accept on;
- worker_commections 1024;
- use epoll;
- }
复制代码
http块
http模块是nginx.conf配置文件中最重要的部分,日常开发中最重要的的配置几乎都是在这个模块中进行的;
1、定义MIME-Type
我们都知道浏览器中可以显示的内容有 HTML 、 XML 、 GIF 等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说 MIME Type 是网络资源的媒体类型。 Nginx 作为 web 服务器,也需要能够识别前端请求的资源类型; 在 Nginx 的配置文件中,默认有两行配置 include mime.types; default_type application/octet-stream;
default_type
用来配置 Nginx 响应前端请求默认的 MIME 类型。 
在default_type之前还有一句include mime.types ,include之前我们已经介绍过,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中;
举例说明:
有些时候请求某些接口的时候需要返回指定的文本字符串或者 json 字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx 快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。 配置实现如下: - location /get_text {
- #这里也可以设置成
- default_type text/plain;
- return 200 "This is nginx's text";
- }
- location /get_json {
- default_type application/json;
- return 200 '{"name":"TOM","age":18}';
- }
复制代码 配置完毕后,重启nginx,浏览器分别访问上面两个路径,均能满足预期的效果


2、自定义服务日志
Nginx 中日志的类型分 access.log 、 error.log
- access.log:用来记录用户所有的访问请求
- error.log:记录nginx本身运行时的错误信息,不会记录用户的访问请求
Nginx 服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log 和 log_format 指令。
access_log
用来设置用户访问日志的相关属性 
log_format
用来指定日志的输出格式 
其他配置指令
1、 sendfifile
用来设置 Nginx 服务器是否使用 sendfifile() 传输文件,该属性可以大大提高Nginx 处理静态资源的性能 
2、keepalive_timeout
用来设置长连接的超时时间

3、keepalive_requests
用来设置一个keep-alive连接使用的次数

补充说明:为什么要使用keepalive?
- 我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接;
- 如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,可以告诉服务器端在处理完 一个请求后保持这个TCP连接的打开状态;
- 若接收到来自这个客户端的其 他请求,服务端就会利用这个未被关闭的连接,而不需要重新创建一个新 连接,提升效率;
- 但是这个连接也不能一直保持,这样的话,连接如果过 多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |