2020-03-22 Nginx技术深入剖析
1. Nginx软件的功能模块说明
1.1 Nginx核心功能模块(Core functionality)
Nginx核心功能模块负责Nginx的全局应用,主要对应主配置文件的Main区块和Events区块区域,这里有很多Nginx必须的全局参数配置。有关核心功能模块的详细信息官方地址为:http://nginx.org/en/docs/ngx_core_module.html。
1.2 标准的HTTP功能模块集合
这些标准的HTTP功能模块,虽然不是Nginx软件所必须的,但都是很常用的,因此绝大部分默认情况都会自动安装到Nginx软件中,见下表。不建议擅自改动,保留软件的默认配置就好,除非你明确知道你在做什么,有什么额外影响。

在生产环境中,配置、调整及优化Nginx软件,主要就是根据这些模块的功能修改相应的参数来实现的。通过官方地址http://nginx.org/en/docs/可以查看到上述及更多的模块的详细使用帮助。
2. Nginx软件的目录结构说明
[root@web01 html]# tree /application/nginx
/application/nginx
├── client_body_temp
├── conf ---这是nginx的所有的配置文件的目录,极其重要
│?? ├── fastcgi.conf ---fastcgi相关参数的配置文件
│?? ├── fastcgi.conf.default ---fastcgi.conf的原始备份
│?? ├── fastcgi_params ---fastcgi的参数文件
│?? ├── fastcgi_params.default ---fastcgi的参数文件备份
│?? ├── koi-utf
│?? ├── koi-win
│?? ├── mime.types ---媒体类型文件
│?? ├── mime.types.default ---mime.types文件备份
│?? ├── nginx.conf ---这是nginx默认的主配置文件
│?? ├── nginx.conf.default ---nginx默认的主配置文件备份
│?? ├── scgi_params ---scgi相关参数文件
│?? ├── scgi_params.default ---scgi相关参数文件备份
│?? ├── uwsgi_params ---uwsgi相关参数文件,配置Python环境可能会用到
│?? ├── uwsgi_params.default ---uwsgi相关参数文件备份
│?? └── win-utf
├── fastcgi_temp ---fastcgi临时数据目录
├── html ---这是编译安装时nginx的默认站点目录,类似apache的默认站点htdocs目录
│?? ├── 50x.html ---错误页面优雅替代显示文件,例如:出现502错误时会调用此页面
│?? ├── index.html ---默认的首页文件,在实际环境中,大家习惯用index.html、index.php、index.jsp来做网站的首页文件。首页文件名字是在nginx.conf中事先定义好的。
├── logs ---这是nginx默认的日志路径,包括错误日志及访问日志
│?? ├── access.log ---这是nginx的默认访问日志文件,使用tail -f access.log可以时时观看网站用户访问情况信息
│?? ├── error.log ---这是nginx的错误日志文件,如果nginx出现启动故障等问题,一定要看看这个错误日志
│?? └── nginx.pid ---nginx的pid文件,nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp ---临时目录
├── sbin ---这是nginx命令的目录,如nginx的启动命令nginx
│?? └── nginx ---nginx的启动命令
├── scgi_temp ---临时目录
└── uwsgi_temp ---临时目录
9 directories, 21 files
3. Nginx主配置文件nginx.conf
Nginx主配置文件nginx.conf是一个纯文本类型的文件(其他配置文件大多也是如此),它位于Nginx安装目录下的conf目录,整个配置文件是以区块的形式组织的。一般,每个区块以一个大括号“{}”来表示,区块可以分为几个层次,整个配置文件中Main区位于最上层,在Main区下面可以有Events区、HTTP区等层级,在HTTP区中又包含一个或多个Server区,每个Server区中又可有一个或多个Location区,整个Nginx配置文件nginx.conf的主体框架为:





nginx.conf是Nginx最重要的配置文件之一,因此必须要搞掂它。下面针对默认主配置文件nginx.conf的参数做详细的中文解释。
去掉所有注释行后其形式如下:
[root@web01 html]# egrep -v "^$|#" /application/nginx/conf/nginx.conf|cat -n ---去掉包含#和空行的内容
1 worker_processes 1; ---worker进程的数量
2 events { ---事件区块开始
3 worker_connections 1024; ---每个worker进程支持的最大连接数
4 } ---事件区块结束
5 http { ---HTTP区块开始
6 include mime.types; ---Nginx支持的媒体类型库文件包含
7 default_type application/octet-stream; ---默认的媒体类型
8 sendfile on; ---开启高效传输模式
9 keepalive_timeout 65; ---连接超时
10 server { ---第一个Server区块开始,表示一个独立的虚拟主机站点
11 listen 80; ---提供服务的端口,默认80
12 server_name localhost; ---提供服务的域名主机名
13 location / { ---第一个Location区块开始
14 root html; ---站点的根目录,相对于Nginx安装目录
15 index index.html index.htm; ---默认的首页文件,多个用空格分开
16 }
17 error_page 500 502 503 504 /50x.html; ---出现对应的http状态码时,使用50x.html回应客户
18 location = /50x.html { ---Location区块开始,访问50x.html
19 root html; ---指定对应的站点目录为html
20 } ---location区块结束
21 } ---server区块结束
22 } ---http区块结束
4. Nginx其他的配置文件
如果是配合动态服务,Nginx软件还可能会用到扩展的FastCGI以及uwsgi等相关配置文件,这些配置是通过在nginx.conf主配置文件中嵌入include命令来实现的,不过默认情况是注释状态,不会生效。
Nginx配合PHP动态服务相关配置文件为fastcgi.conf、fastcfi_params。
Nginx配合Python动态服务相关配置文件为uwsgi_params。