详解Nginx系列

在这里插入图片描述
1.Nginx特点

Nginx是一个事件驱动架构,而非传统过程驱动架构。具有内存占用低,当并发连接大时,能够预测内存使用率。Nginx改变了传统的web服务器体系架构,提高了响应速度,起初Nginx开发的目标是实现10倍以上的性能,并能够模块化,事件驱动,异步,单线程web服务器和web服务器代理。

(1)Nginx作为web服务器

Nginx使用更少的资源,支持更多连接,更快响应,能够支持高达50000个并发连接的响应,并选用了epoll and kqueue模型。

(2) Nginx作为负载均衡服务器

不仅可以支持Rails和PHP,也可作为HTTP代理服务器。Nginx是使用C语言开发,这使得CPU占有率和系统资源开销比Perbal出色很多。

(3)Nginx作为邮件代理服务器

Nginx最早是作为一个邮件代理服务器,所以它本身就是一个很好的代理服务器。并且安装和配置简单,,升级简单(热升级),bugs非常少。启动简单,几乎可以做到7*24不间断运行,运行数个月也不需要重新启动。

2.Nginx架构

Nginx采用了操作系统中高级事件机制的不断发展的启发,开发了一个模块化,事件驱动,异步,单线程的非阻塞架构。并使用复用和事件通知,用于分离进程的特定任务。在每个worker进程中,nginx可以处理每秒数千个并发连接和请求。这些架构思想,解决了传统web服务器在内存和CPU消耗方面,低效的特点。
在这里插入图片描述
(1)代码结构

nginx包括核心和功能模块,核心是维护某些循环的执行,并在请求处理时,执行模块代码适当部分。模块包括了大部分演示和应用层功能。模块的读取和写入网、存储,转换内容,执行出站过滤,应用服务器端包含操作,并在代理启动时将请求传递给上游服务器。

nginx允许扩展web服务器功能,不用修改nginx其它源码,但不支持动态加载模块。即在构建阶段将模块与其核心一起编译。nginx使用一些事件通知机制和磁盘IO性能增强,如kqueue,epoll和事件端口,并优化了复用和高级I/O操作的不同使用方法。主要目的是使得操作系统的提示能够及时,并且能够快速获得入站和出站流量,磁盘操作,读取和写入套接字等。

(2)工作模式

worker进程接受自共享"listen"套接字的新请求,并高效执行循环,处理数千个连接。注意这个过程是没有仲裁或分配与nginx工作的联系,这个worker是由操作系统内核机制完成。启动后,首先创建一组初始侦听套接字,然后worker不断处理HTTP请求,不断接收,读取和写入套接字。

这个直线循环是很复杂部分,包括内部调用,并在很大程度上依赖异步任务处理,异步操作通过模块化,事件通知,广泛使用回调函数和微调定时器来实现。开发的关键原则是尽可能不要阻塞,但是当磁盘空间不够时,应该要阻塞。

nginx由于谨慎使用内存(不会连接一个线程或线程),同时也节省CPU使用周期(没有持续创建和销毁),当初始化新连接,并将其添加到运行循环中,并异步处理指导完成,此时连接被重新分配并从运行循环中删除。为什么CPU使用率低?一般就是结合优化系统调用流程和支持接口(如pool,slab内存分配器),使得在极端工作负载下实现很低的CPU负载。

如何根据磁盘使用和 CPU 负载模式去配置nginx 工作(worker)的数量?

如果负载大多是大量处理TCP/IP,执行SSL或压缩,则worker的数量与CPU核的数量相匹配。如果负载大多是磁盘 I/O 绑定,存储或重代理服务,worker的数量可能是核心数量的一到两倍。

关于worker模式与嵌入式脚本有限支持有关,一个使用标准的 nginx 分发,只支持嵌入 Perl 脚本。由于脚本有意外退出的可能,就可能导致worker挂起,同时影响数千个连接。所以脚本应该更稳定才行。

(3)Nginx进程

主要由主进程和多个worker进程。所有进程都是单线程,进程间通信主要采用共享内存进行通信。主进程作为root用户运行,worker进程,缓存加载器和管理器(nginx特殊用途)则以无权限用户执行。

主进程工作:

1.读取,验证配置

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

3.启动,终止和维护配置的worker进程

4.重新配置,无需中断服务

5.重新打开日志文件

6.编译嵌入式perl脚本

worker进程工作:

(1)处理客户端连接

(2)提供反向代理和过滤功能

缓存加载器工作:

(1)检查磁盘缓存项目,使用nginx实例来处理已经存储在磁盘的特定分配的目录结构中的文件,遍历目录,检查缓存内容元数据,更新共享内存的相关条目,然后在退出时再清理。

缓存管理器工作:

(1)主要清理缓存,正常的nginx操作保持在内存中,并且在失败的情况下由主进程重新启动。

3.Nginx缓存

nginx中的缓存是以文件系统的分层数据存储实现。缓存密钥(可配置)和缓存元数据存储在共享存储器段中,通过高速缓存加载器,缓存管理器和worker进程访问。每个缓存的响应都放在文件系统上的不同文件中,并通过不同nginx配置命令进行控制。当响应写入缓存目录结构时,文件的路径和名称将从代理URL的MD5哈希导出。

将数据放在缓存的过程如下:

(1) nginx从上游服务器读取响应,首先写入缓存目录结构之外的临时文件

(2)nginx完成处理请求,将临时文件移动到缓存目录。如果临时文件位于另外一个文件系统,则文件将被复制,因此建议将临时文件目录和缓存目录保存在同一文件系统。

(3)如果要显式删除缓存目录结构,从文件中删除文件也是很安全。

4.安装Nginx

nginx只是实现了http这一层,pcre是负责正则表达式的,正则表达式,只是用在location.conf文件里面。 openssl应用与加密。Zlib应用于压缩。服务器返回客户端的数据,需要压缩的方式。
在这里插入图片描述
解压nginx
在这里插入图片描述
解压openssl
在这里插入图片描述
解压pcre
在这里插入图片描述
解压zlib
在这里插入图片描述
配置命令:

./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-stream --with-pcre=/home/qaa/share/nginx/pcre-8.41 --with-zlib=/home/qaa/share/nginx/zlib-1.2.11 --with-openssl=/home/qaa/share/nginx/openssl-1.1.0g

出现如下,配置成功:
在这里插入图片描述
再make
在这里插入图片描述
出现如下,编译成功。
在这里插入图片描述
make install 出现如下编译成功:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值