目录
一、Nginx概述
Nginx是一个高性能的Web服务器软件,不仅提供Web服务器的功能,还实现了诸如访问路由、正向/反向代理、负载均衡、内容缓存、可编程等应用特性,使得Nginx成为互联网上最受欢迎的开源软件之一。
官方有Nginx开源版本和Nginx Plus商业版本,开源版本是使用最多的版本,商业版本除了具有开源版本的全部功能外,还提供了一些企业级功能。而国内流行的Nginx主要有两个开源版本,一是由淘宝网技术团队维护的分支版本 Tengine 项目;二是由章亦春发起的扩展版本 OpenResty 项目。
本文及后续系列文章,均使用Nginx官方开源版本。
(一)、Nginx安装目录简介
Nginx默认编译安装后,安装路径为/usr/local/nginx/,下面介绍该路径下几个主要的默认子目录。
1、conf目录
该目录下保存Nginx服务所有的配置文件,其中nginx.conf是最核心最主要的配置文件,其他.conf后缀的配置文件则是用来配置Nginx相关的功能的。例如配置fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件。每个配置文件一般都有个样例配置文件,以.default结尾,使用时复制并将.default去掉即可。
2、html目录
该目录下保存Nginx服务的web文件,但是可以更改为其他目录保存web文件。默认有两个web文件50x.html和index.html,50x.html文件是默认的错误提示页面,index.html文件是默认的主页面。
3、sbin目录
该目录下保存Nginx服务的二进制脚本,可以接受不同的参数以实现Nginx服务启动、关闭等功能。
4、log目录
该目录用来保存Nginx服务的访问日志和错误日志等,访问日志文件为access.log,错误日志文件为error.log。log目录可以根据实际需求配置在其他路径,比如/var/log/nginx里面。
(二)、Nginx配置文件简介
Nginx默认编译安装后,配置文件都会保存在/usr/local/nginx/conf目录下。Nginx默认的主配置文件是nginx.conf,这也是Nginx唯一的默认配置文件入口。
1、配置文件目录结构
/usr/local/nginx/conf配置文件目录结构如下:
其中,以“.default”为扩展名的文件是Nginx配置文件的配置样例文件。
- nginx.conf:Nginx默认配置文件,也是唯一的配置文件入口。
- fastcgi_params:Nginx在配置FastCGI代理服务时会根据 fastcgi_params文件的配置向FastCGI服务器传递变量,该配置文件现已由fastcgi.conf代替。
- fastcgi.conf:为了规范配置指令 SCRIPT_FILENAME的用法,引人FastCGI变量传递配置。
- mime.types:MIME类型映射表,Nginx会根据服务端文件后缀名在映射关系中获取所属文件类型,将文件类型添加到HTTP消息头字段“Content-Type”中。
- scgi_params:Nginx在配置SCGI代理服务时会根据scgi_params文件的配置向SCGI服务器传递变量。
- uwsgi _params:Nginx在配置uWSGI代理服务时会根据uwsgi_params文件的配置向uWSGI服务器传递变量。
- koi-utf、koi-win、win-utf:这3个文件是KOI8-R编码转换的映射文件,因为Nginx的作者是俄罗斯人,在Unicode流行之前,KOI8-R是使用最为广泛的俄语编码。
2、主配置文件nginx.conf
Nginx默认的主配置文件是nginx.conf,这也是Nginx唯一的默认配置文件入口。nginx.conf文件主要由不同的功能模块组成,下面将简单介绍其中的核心模块。
nginx.conf配置文件主要结构如下:
(1)、main全局模块
Nginx的根区域,该区域的配置全局有效。nginx.conf的整个文件内容都配置在该区域中。
主要配置项如下:
- user:用来指定nginx worker进程运行用户以及用户组,默认nobody账号运行。
- worker_processes:指定Nginx服务要开启的子进程数量,通常数量是CPU内核数量的整数倍。
- error_log:定义错误日志文件的位置以及日志输出级别(debug/info/notice/warn/error/crit)
- pid:用来指定Nginx进程id存储文件的位置。
(2)、events模块
events模块主要是Nginx事件相关的配置,主要影响Nginx服务与用户的网络连接。比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数等。
主要配置项如下:
- worker_connections:指定最大可以同时接收的连接数量,这里一定要注意,最大连接数量是和worker_processes共同决定的。
- multi_accept:配置指定nginx在收到一个新连接通知后尽可能多的接受更多的连接
- use epoll:配置指定了线程轮询的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac请使用Kqueue
(3)、http模块
http模块是Nginx服务配置最核心的模块,配置项较多,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这里根据实际需求进行配置。http模块可以包含多个server模块,而一个server模块中又可以包含多个location模块。
(4)、server模块
server模块是http模块中的一个子模块,用来配置一个虚拟主机。在server模块中可以定义虚拟主机监听端口、虚拟主机名称、访问日志文件等内容。一个http模块中可以包含多个server模块,即可以定义多个虚拟主机。同时每个server模块中也可以包含多个location模块。
(5)、location模块
location模块主要用于对用户URI进行访问路由处理的配置。location模块基于Nginx接受到的请求字符串,对用户请求的URI进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存、应答控制、反向代理、负载均衡等功能都是在这部分实现。另外很多第三方模块的配置也是在location模块中配置。location模块是server模块的子模块,一个server模块可以同