美文网首页
Nginx--原理和基本配置

Nginx--原理和基本配置

作者: caiger | 来源:发表于2018-04-09 16:39 被阅读0次

    特点

    • 开源(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--原理和基本配置

          本文链接:https://www.haomeiwen.com/subject/gjdmhftx.html