Nginx--原理和基本配置

特点

  • 开源(BSD许可协议)
  • 高并发 (取决于内存,linux非阻塞epoll事件模型)
  • 支持热部署(master-woker模型,异步多线程)
  • 高扩展性(内部模块化清晰)
  • 静态资源访问和反向代理

原理

master-woker模型:一个master进程管理多个woker进程,master进程负责读取配置文件、接收指令和管理woker进程。woker进程数在配置文件中指定,一般不大于cpu核数。
接收指令方式:nginx -signal;或者针对系统中Nginx的pid进行操作的指令
常用nginx指令:stop、quit、reload
测试nginx配置:nginx -t
reload过程:master接收到重启信号后,重新读取配置文件并进行语法检测。如果正确,根据新的配置文件建立新的woker进程,并给旧woker进程发送终止信号。旧woker进程收到终止信号后会停止接收新的连接,在处理完当前连接后退出,用这种方式可以实现热部署。
请求分配过程:Nginx由master负责接收请求,在woker中处理请求。woker用linux的epoll模型通过epoll_wait从master接收请求,当woker数大于1时,通过竞争互斥锁来接收新的请求:

  • 如果当前处理的请求数大于设置的最大连接数的7/8,则不去获取锁,实现负载均衡。
  • 从共享内存中尝试获取锁,如果获取成功,设置成功标志,本woker进程的epoll获取到接收请求的监听句柄,停掉其他事件,开始接收新的请求。
  • 新请求接收完成后,释放锁,继续处理之前的事件。

模块: Nginx底层用C语言实现,将请求到达、处理、返回结构的过程抽象成一个个模块,每一步通过相应的handler模块进行处理,对数据通过filter进行过滤。除了最基本的core、event、http、mail、stream模块之外,还有各种扩展模块如upstream模块等。使用时各模块的配置和扩展模块在配置文件中指定,具体实现可以通过研究源码来了解。

配置文件说明

nginx.conf

user  nobody;
worker_processes  1;
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}
include conf.d/http.conf;

Nginx根据/nginx/conf目录下的nginx.conf配置文件中配置的指令对应的模块进行工作。指令分为单一指令(simple directive)、块(blocks)、上下文(context)。
单一指令结构为“名称 [参数];”,块的结构跟单一指令相同,用“{}”包裹;上下文是一些具有层级结构的指令集,用来区分不同的通信方式:event(IO读写规则配置)、http(http server配置)、mail(mail server配置)、stream(TCP、UDP配置)。最外层的上下文称为main,包含一些通用的Nginx配置,包括用户、进程数、日志配置等。
在nginx.conf中通过include指令来引用不同功能的配置文件。配置文件中的相对路径根目录为nginx.conf所在目录。通过引用形成的继承关系可以传递父文件中的指令和变量,也可以在子文件中对它们进行覆盖。
在配置文件中可以使用变量,格式为“$name”,可以通过指令setmapgeo设置。Nginx预设了部分指令:$uri表示当前URI,$host表示请求header中的host等

参考文献

Linux惊群效应详解
Linux IO模式及 select、poll、epoll详解
“惊群”,看看nginx是怎么解决它的

你可能感兴趣的:(Nginx--原理和基本配置)