1、Nginx配置文件结构
之前便讲过,默认的Nginx配置文件存放在安装目录conf中,主配置文件为nginx.conf,默认的配置文件是比较复杂,不过结构和内容还是比较清晰,在此简化出一个最基本的配置:
#全局区域
worker_processes 1; #全局区域
#events区域
events {
worker_connections 1024;
}
#http区域
http {
include mine.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#server区域
server {
listen 80;
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;
}
}
}
从上面的配置文件内容,我们可以归纳nginx.conf的基本结构为:
#全局区域
#events区域
events {
}
#http区域
http {
#server区域
server {
#location区域
location [PATTERN] {
...
}
location [PATTERN] {
...
}
}
server {
#location区域
location [PATTERN] {
...
}
location [PATTERN] {
...
}
}
}
- 全局区域:全局区是默认配置文件从开始到events区域之间的内容,主要设置Nginx整体运行的配置指令,放在这个地方的指令是的作用域是全局的。通常用来配置服务器的用户(组),允许开启的work进程数,我们在第二节讲过,默认的配置开启的是一个master进程和一个work进程,此外还可以设置进程PID的存放路径,日志的存放路径已经配置文件引入等等。
- events区域:以events为key包含的对象便是events区域。该区域主要用于每个work进程可以支持的最大连接数,是否允许同时接受多个网络连接,选用哪一种事件驱动(后续会介绍)等等。
- http区域:以http为key包含的对象便是http区域,该区域是整个配置最为重要和复杂的部分,后续讲到的压缩、代理、缓存、日志等等给你都会在这里涉及。此外还可以在这里引进子配置文件。
- server区域:以http为key包含的对象便是http区域,该区域必须在http中。事实上这么将并不严谨,目前就先这么认为。一个server代表一个虚拟服务。每个http可以包含多个server,这就意味者我们一台Nginx是可以对外提供多个服务的。
- location区域:严格来讲location是server的一个指令,而不能称之为区域。在此可以针对Nginx接收到的请求字符串进行匹配做相应的处理,例如重定向、数据缓存、或者应答控制等。
2、Nginx配置指令
2.1 配置运行Nginx服务的用户(组)
该配置会涉及Nginx启动,缓存文件,读取文件等权限。该指令只能存在全局区域。
user <<USER>> <<GROUP>>;
USER: 系统用户,必填
GROUP: 系统用户组,选填
举例
user root
2.2 配置允许生成的worker process数
worker process数是Nginx实现并发服务器的关键所在,理论上worker process数越大,支持的并发越大,实际上会受限于硬件资源。前面我们提过,Nginx启动时,默认会有一个work进程,如果worker_process此参数为5,那么启动时会有5个work进程。该指令只能存在全局区域。
worker_process <<number | auto>>;
number: 指定的数量
auto: 设置此值,Nginx进程会自动检测
举例
worker_process 5
2.3 配置Nginx进程PID存放路径
Nginx启动之后会有pid文件记录这个服务进程,该文件默认存放在logs目录下。可以通过一下指令来修改该文件的存放路径。该指令只能存在全局区域。
pid <<path>>
path: 路径说明,可以为相对路径也可以是绝对路径,注意必须具体到文件名称
举例
pid /sbin/nginx.pid
2.4 配置错误日志存放路径
指定该配置之后,Nginx服务会将运行中所有的错误日志记录到该文件。支持指定错误日志等级。值得注意的是:运行Nginx服务的用户必须对该日志文件有写入权限。该指令能存在全局区域、http区域、server区域。
error_log <<file | stderr>> [ debug | info | notice | warn | error | crit | alert | emerg ]
举例
error_log logs/error.log error