[行业资讯] Nginx介绍-流量及并发连接数限制

本文来源于实验楼linux web运维(nginx)实战课程,原文链接:https://www.shiyanlou.com/courses/95

原文连接:https://blog.csdn.net/u013182675/article/details/50222987


1.什么是nginx

nginx是一款高性能的HTTP和反向代理服务器软件。

2.为什么选择nginx  

Nginx 和 Apache 相同点:

  • 同是HTTP服务器软件,都采用模块化结构设计

  • 支持通用语言接口,如PHP,Python等

  • 支持正向代理和反向代理

  • 支持虚拟主机及ssl加密传输

  • 支持缓存及压缩传输

  • 支持URL重写

  • 模块多,扩展性强

  • 多平台支持

Nginx的优势

  • 轻量级 安装文件小 运行时CPU内存使用率低

  • 性能强 支持多核,处理静态文件效率高,内核采用的poll模型最大可以支持50K并发连接

  • 支持热部署 同时启动速度快,可以在不间断服务的情况下对软件和配置进行升级

  • 负载均衡 支持容错和健康检查

  • 代理功能强大 支持无缓存的反向代理,同时支持IMAP/POP3/SMTP的代理


3.工作原理  

Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx的各种功能和操作都由模块来实现。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。

  • 核心模块: HTTP模块、EVENT模块和MAIL模块

  • 基础模块: HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块

  • 第三方模块: HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块及用户自己开发的模块

这样的设计使Nginx方便开发和扩展,也正因此才使得Nginx功能如此强大。Nginx的模块默认编译进nginx中,如果需要增加或删除模块,需要重新编译Nginx,这一点不如Apache的动态加载模块方便。如果有需要动态加载模块,可以使用由淘宝网发起的web服务器Tengine,在nginx的基础上增加了很多高级特性,完全兼容Nginx,已被国内很多网站采用。

4.nginx 处理连接过程

    nginx 不会为每个连接派生进程或线程,而是由 worker 进程通过监听共享套接字接受新请求,并且使用高效的循环来处理数千个连接。Nginx 不使用仲裁器或分发器来分发连接,这个工作由操作系统内核机制完成。监听套接字在启动时就完成初始化,worker 进程通过这些套接字接受、读取请求和输出响应。


master:

当 nginx 在启动后,会有一个 master 进程和多个 worker 进程。master进程主要用来管理worker进程,master 要做的就是:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。

主要完成如下工作:

  • 读取并验证配置信息;

  • 创建、绑定及关闭套接字;

  • 启动、终止 worker 进程及维护 worker 进程的个数;

  • 无须中止服务而重新配置工作;

  • 控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本;

  • 重新打开日志文件;

  • 编译嵌入式 perl 脚本

worker:

对于基本的网络事件,则是放在 worker 进程中来处理了。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求(一对一)。然而 nginx 没有专门地仲裁或连接分布的 worker,这项工作是由操作系统内核机制完成的。在启动时,创建一组初始的监听套接字,HTTP 请求和响应之时,worker 连续接收、读取和写入套接字。

worker 进程主要完成的任务包括:

  • 接收、传入并处理来自客户端的连接;

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

  • nginx 任何能完成的其它任务

Nginx详细介绍,请参考:https://blog.csdn.net/u013182675/article/details/50222987