Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。 配置文件支持大量可配置的指令,绝大多数指令不是特定属于某一个块的。同一个指令放在不同层级的块中,其作用域也不同,一般情况下,高一级块中的指令可以作用于自身所在的块和此块包含的所有低层级块。如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级块中的配置为准。比如,某指令同时出现在http全局块中和server块中,并且配置不同,则应该以server块中的配置为准。整个配置文件的结构大致如下:#全局块#user nobody;worker_processes 1;#event块events { worker_connections 1024;}#http块http { #http全局块 include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #server块 server { #server全局块 listen 8000; server_name localhost; #location块 location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } #这边可以有多个server块 server { … }}全局块全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。# 指定可以运行nginx服务的用户和用户组,只能在全局块配置# user [user] [group]# 将user指令注释掉,或者配置成nobody的话所有用户都可以运行# user nobody nobody;# user指令在Windows上不生效,如果你制定具体用户和用户组会报小面警告# nginx: [warn] “user” is not supported, ignored in D:\software\nginx-1.18.0/conf/nginx.conf:2# 指定工作线程数,可以制定具体的进程数,也可使用自动模式,这个指令只能在全局块配置# worker_processes number | auto;# 列子:指定4个工作线程,这种情况下会生成一个master进程和4个worker进程# worker_processes 4;# 指定pid文件存放的路径,这个指令只能在全局块配置# pid logs/nginx.pid;# 指定错误日志的路径和日志级别,此指令可以在全局块、http块、server块以及location块中配置。(在不同的块配置有啥区别??)# 其中debug级别的日志需要编译时使用–with-debug开启debug开关# error_log [path] [debug | info | notice | warn | error | crit | alert | emerg] # error_log logs/error.log notice;# error_log logs/error.log info;events块events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活调整。# 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程下,就有可能出现这样的问题。# 开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢# 默认是开启状态,只能在events块中进行配置# accept_mutex on | off;# 如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。 # 如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。# 默认是off状态,只能在event块配置# multi_accept on | off;# 指定使用哪种网络IO模型,method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,一般操作系统不是支持上面所有模型的。# 只能在events块中进行配置# use method# use epoll# 设置允许每一个worker process同时开启的最大连接数,当每个工作进程接受的连接数超过这个值时将不再接收连接# 当所有的工作进程都接收满时,连接进入logback,logback满后连接被拒绝# 只能在events块中进行配置# 注意:这个值不能超过超过系统支持打开的最大文件数,也不能超过单个进程支持打开的最大文件数,具体可以参考这篇文章:https://cloud.tencent.com/developer/article/1114773# worker_connections 1024;http块http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。前面已经提到,http块中可以包含自己的全局块,也可以包含server块,server块中又可以进一步包含location块,在本书中我们使用“http全局块”来表示http中自己的全局块,即http块中不包含在server块中的部分。可以在http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。
|