一、简介:
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 根据主进程号去发送信号-关闭