nginx介绍

一、简介:

     1.nginx引擎是一个HTTP反向代理服务器,邮件代理服务器,和一个通用的TCP代理服务器,最初由Igor Sysoev写的。

在很长一段时间里,它已经运行在许多重量级的俄罗斯的网站,包括Yandex、邮件。俄文、VK Rambl。

全球共有23.36% busiest sites in September 2015.使用nginx。

    

     2.基本的HTTP服务器特性:

         (1)提供静态和索引文件,自动索引;打开的文件描述符缓存;

(2)加速反向代理缓存;负载均衡和容错;

(3)加速FastCGI的支持与缓存、uwsgi SCGI,和memcached服务器,负载均衡和容错;

(4)模块化的体系结构。过滤器包括gzip、字节范围,分块反应,XSLT,SSI和图像转换过滤器。

   多个SSI包含在单个页面可以并行处理,如果他们通过代理或FastCGI处理/ uwsgi SCGI服务.

(5)SSL and TLS SNI support; 

(6)支持HTTP/2 加权和基于依赖关系的优先级;

 

    3.其他HTTP服务器功能

(1)基于域名和基于IP的虚拟主机;

(2)keep-alive客户端到服务器端的连接持续有效和pipeline连接支持;

(3)重新配置和在线升级时,不需要中断正在处理的请求;

(4)3xx到5xx错误代码重定向;

(5)重新rewrite规则,使用正则表达式改变url;

(6)根据客户端地址执行不同的功能,可以做访问控制;

         (7)支持验证HTTP referer  SSL;

(8)支持FLV和MP4流;

(9)速度限制,连接数或请求数限制;


    4.统一基于进程或线程模型架构的web服务通过每进程或每线程处理并发连接请求,其另一个必然结果则是对内存或cpu的利用率低下,生成一个新的进程,线程需要事先备好其运行时的环境。这包括为其分配堆内存和栈内心,以及为其创建新的执行上下文章,这些操作都需要占用cpu,而且很多的进程。


    5.在设计的最初阶段,nginx的主要着眼点就是其高性能以及对物理计算的高密度利用,因此采用了不同的架构模型;受启发于多种操作系统设计中基于‘事件’的高级处理机制,nginx采用了模块化,事件驱动,异步,单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制,在nginx中,连接请求由为数不多的几个仅仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个并发连接以及请求。

   

***6.如果负载以cpu密集型应用为主,如SSL或压缩应用,则worker数应与cpu数相同。

     如果负载以IO密集型应用为主,如响应大量内容给客户端,则worker数应该为cpu个数的1.5倍或2倍。

 

   7.nginx会按需同时运行多个进程,一个主进程master和几个工作进程worker,配置了缓存时还会有缓存加载器进程cache loader和缓存管理器cache manager,,等等。所有进程均是仅仅含有一个线程,并主要通过共享内存的机制实现进程间通信,主进程以root用户身份运行,而worker,cache loader,cache manager均用非特权身份运行。


二、nginx主进程主要完成如下工作:   

    1.读取并验证配置信息;

    2.创建,绑定及关闭套接字;

    3.启动,终止,与维护worker进程的个数,

    4.无需终止服务而重新配置工作特性;

    5.控制非中断试程序升级,启用新的二进制程序并在需要时回滚至老版本。

    6.重新打开日志文件,编译嵌入式perl脚本。

   

三、worker进程主要完成如下工作:

    1.接收,传入并处理来自客户端的连接;

    2.提供反向代理及过滤功能;

    3.nginx任何能完成的其他任务。

四、 cache loader进程主要完成如下工作:

    1.检查缓存存储中的缓存对象;

    2.检查缓存元数据建立内存数据库;

    cache manager进程主要完成如下工作:  缓存失效的过去检验

    nginx的配置有几个不同的上下文,main  http  server  upstream和location以及实现邮件服务反向代理的mail

配置语法格式和定义方式遵循所谓的C风格,因此支持嵌套,还有着逻辑清晰并易于创建,运行和维护。


    nginx的代码是由一个核心和一系列的模块组成,核心主要用于提供web server的基本功能,以及web和mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间的平滑交互;不过,大多数跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的,这些功能模块大致可分为事件模块,阶段性处理器,输出过滤器,变量处理器和负载均衡几个类别,这些共同组成了nginx的http功能,事件模块主要用于提供os独立的事件通知机制如:kqueue或epoll。

     协议模块则负责实现nginx通过http,tls/ssl,smtp,pop3与对应的客户端建立会话

在nginx内部,进程间的通信是通过模块的pipline或chain实现的,换句话说;每一个功能或操作都是由一个模块来实现,例如:压缩通过FastCGI或uwsgi协议与upstream服务器通信,以及与memcached建立会话等。 


   Starting, Stopping, and Reloading Configuration 启动、停止、和加载配置文件

nginx -s signal   使用 nginx -s  +信号类型
  • stop — fast shutdown   快速关闭

  • quit — graceful shutdown  优雅关闭(建议)

  • reload — reloading the configuration file  重新加载配置文件

  • reopen — reopening the log files   重新加载日志文件

   kill -s QUIT 1628   根据主进程号去发送信号-关闭


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章