Nginx服务模块详解

Nginx 工作原理

Nginx 由内核和模块组成

Nginx 本身做的工作实际很少,当它接到一个 HTTP 请求时, 它仅仅是通过查找配置文件将此次请求映射到一个 location block,而此 location 中所配 置的各个指令则会启动不同的模块去完成工作,因此模块可以看做 Nginx 真正的劳动工作者。

通常一个 location 中的指令会涉及一个 handler 模块和多个 filter 模块(当然,多个 location 可以复用同一个模块)。handler 模块负责处理请求,完成响应内容的生成,而 filter 模块对响应内容进行处理。 用户根据自己的需要所开发的模块都属于第三方模块。正是有了这么多模块的支撑, Nginx 的功能才会如此强大。

Nginx 的模块从结构上分为核心模块、基础模块和第三方模块:

?

核心模块:

HTTP 模块、EVENT 模块和 MAIL 模块; ?

基础模块:

HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块;

第三方模块:

HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模 块。
?

Nginx 的模块从功能上分为如下三类: ?

Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改 headers 信息等操作。Handlers 处理器模块一般只能有一个; ?
Filters(过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 Nginx 输出;
Proxies(代理类模块):此类模块是 Nginx 的 HTTP Upstream 之类的模块,这些模块主要与后端一些服务比如 FastCGI 等进行交互,实现服务代理和负载均衡等功能。

Nginx 的进程模型

在工作方式上,Nginx 分为单工作进程和多工作进程两种模式。
?

单工作进程模式:

除主进程外,还有一个工作进程,工作进程是单线程的; ?

多工作进程模式:

每个工作进程包含多个线程。Nginx 默认为单工作进程模式。

Nginx 在启动后,会有一个 master 进程和多个 worker 进程。

master 进程

  • 主要用来管理 worker 进程
  • 主要包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动 重新启动新的 worker 进程。

    master 进程

  • 充当整个进程组与用户的交互接口,同时对进程进行监护。
  • 它不需要处理网络事件,不负责业务的执行,只会通过管理worker 进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。

Nginx+FastCGI运行原理

  • Nginx 不支持对外部程序的直接调用或者解析,所有的外部程序(包括 PHP)必须通过FastCGI 接口来调用。
  • FastCGI 接口在 Linux 下是 socket(这个 socket 可以是文件 socket, 也可以是 ip socket)。
  • wrapper 为了调用 CGI 程序,还需要一个 FastCGI 的 wrapper(wrapper 可以理解为用于启动另一个程序的程序),这个 wrapper 绑定在某个固定 socket 上,如端口或者文件 socket。
  • 当 Nginx 将 CGI 请求发送给这个 socket 的时候,通过 FastCGI 接口,wrapper 接收到请求,然后 Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着 wrapper 再将返回的数据通过 FastCGI 接口,沿着固定的 socket传递给 Nginx;最后 Nginx 将返回的数据(html 页面或者图片)发送给客户端。

原文地址:https://blog.51cto.com/14449541/2453105

时间: 2024-10-15 16:32:43

Nginx服务模块详解的相关文章

nginx状态模块详解及实战

nginx status介绍 nginx软件的功能模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能是记录nginx的基本访问状态信息,让使用者了解nginx的工作状态,例如:连接数等信息.要想使用状态模块,在编译nginx时必须增加http_stub_status_module支持. 可通过如下方法检查编译安装nginx时是否设定支持上述模块支持: [[email protected] extra]# /application/nginx/sbin/ng

nginx的配置及模块详解

nginx: nginx是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件,nginx采用了模块化.事件驱动.异步.单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制来实现高并发和高性能,解决C10K的问题,主要功能就是提供http和反向代理服务,以及邮件服务及反向代理等,并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力. 在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loo

nginx的gzip模块详解以及配置

文章来源运维公会:nginx的gzip模块详解以及配置 1.gzip模块作用gzip这个模块无论在测试环境还是生产环境都是必须要开启,这个模块能高效的将页面的内容,无论是html或者css.js亦或是图片等都可以进行压缩,节省了带宽资源,也提高了网站的加载速度,给浏览者带来更优质的服务. 2.启用gzip只要在nginx的配置文件nginx.conf中去配置.在http{gzip on;gzip_min_length 1k;gzip_buffers 4 32k;gzip_http_version

快速部署Python应用:Nginx+uWSGI配置详解

快速部署Python应用:Nginx+uWSGI配置详解 相比于PHP,Python应用的部署很麻烦,比较常用的方法有fcgi与wsgi,然而这两种都很让人头痛.文章介绍了Nginx+uwsgi的简便方法,来快速的部署Python应用. AD: 在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便. 反观Py

nginx学习三 nginx配置项解析详解及代码实现

nginx配置项解析详解及代码实现 0回顾 在上一节,用nginx简单实现了一个hello world程序:当我们在浏览器中输入lochost/hello ,浏览器就返回:hello world.为什么会这样呢,简单一点说就是当我们请求访问hello这个服务,nginx就会看配置文件中是否有,如果有,根据具体的handler处理后把处理的结果返回给用户,没有就返回not found. location /hello { test_hello ;//无参数的配置 这其实是一个简单的配置.这节我们来

Ansible安装部署及常用模块详解

Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> -m NAME,–module-name=NAME:指定执行使用的模块 -u USERNAME,–user=USERNAME:指定远程主机以USERNAME运行命令 -s,–sudo:相当于Linux系统下的sudo命令 -USUDO_USERNAME,–sudo-user=SUDO_USERNAME:使用

Nginx 安装与详解

nginx简介 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用.nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率.nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用.安装更为简单,方便,灵活. 优点 支持高并发,能支持几万并发连接 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到2

Apache httpd(apache2)服务配置详解,Mac下设置虚拟主机部署多个web项目,及反向代理部署Java项目

Apache httpd服务配置详解 查看版本:httpd -v Server version: Apache/2.4.33 (Unix) Server built:   Apr  3 2018 17:54:07 文件路径:/etc/apache2/httpd.conf # 服务目录(全局配置)用于指定Apache的安装路径,# 此选项参数值在安装Apache时系统会自动把Apache的路径写入ServerRoot "/usr" # 设置互斥对象的目录# Mutex default:/

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we