Nginx 一点一滴 03 - 架构机制

Nginx服务器架构

模块化结构

Nginx 服务器的开发彻底遵循模块化设计思想nginx

什么是模块化开发?

  1. 单一职责原则,一个模块只负责一个功能web

  2. 将程序分解,自顶向下,逐步求精正则表达式

  3. 高内聚,低耦合数据库

Nginx的模块化结构

  • 核心模块: Nginx最基本最核心的服务,如进程管理、权限控制、日志记录;json

  • 标准HTTP模块: Nginx服务器的标准HTTP功能;服务器

  • 可选HTTP模块: 处理特殊的HTTP请求多线程

  • 邮件服务模块: 邮件服务架构

  • 第三方模块: 做为扩展,完成特殊功能负载均衡

Nginx的模块清单

  • 核心模块dom

    • ngx_core

    • ngx_errlog

    • ngx_conf

    • ngx_events

    • ngxeventcore

    • ngx_epll

    • ngx_regex

  • 标准HTTP模块

    • ngx_http

    • ngxhttpcore #配置端口,URI分析,服务器相应错误处理,别名控制(alias)等

    • ngxhttplog #自定义access日志

    • ngxhttpupstream #定义一组服务器,能够接受来自proxy, Fastcgi,Memcache的重定向;主要用做负载均衡

    • ngxhttpstatic

    • ngxhttpautoindex #自动生成目录列表

    • ngxhttpindex #处理以/结尾的请求,若是没有找到index页,则看是否开启了random_index;如开启,则用之,不然用autoindex

    • ngxhttpauthbasic #基于http的身份认证(authbasic)

    • ngxhttpaccess #基于IP地址的访问控制(deny,allow)

    • ngxhttplimit_conn #限制来自客户端的链接的响应和处理速率

    • ngxhttplimit_req #限制来自客户端的请求的响应和处理速率

    • ngxhttpgeo

    • ngxhttpmap #建立任意的键值对变量

    • ngxhttpsplit_clients

    • ngxhttpreferer #过滤HTTP头中Referer为空的对象

    • ngxhttprewrite #经过正则表达式重定向请求

    • ngxhttpproxy

    • ngxhttpfastcgi #支持fastcgi

    • ngxhttpuwsgi

    • ngxhttpscgi

    • ngxhttpmemcached

    • ngxhttpempty_gif #从内存建立一个1×1的透明gif图片,能够快速调用

    • ngxhttpbrowser #解析http请求头部的User-Agent 值

    • ngxhttpcharset #指定网页编码

    • ngxhttpupstreamiphash

    • ngxhttpupstreamleastconn

    • ngxhttpupstream_keepalive

    • ngxhttpwrite_filter

    • ngxhttpheader_filter

    • ngxhttpchunked_filter

    • ngxhttprange_header

    • ngxhttpgzip_filter

    • ngxhttppostpone_filter

    • ngxhttpssi_filter

    • ngxhttpcharset_filter

    • ngxhttpuserid_filter

    • ngxhttpheaders_filter #设置http响应头

    • ngxhttpcopy_filter

    • ngxhttprangebodyfilter

    • ngxhttpnotmodifiedfilter

  • 可选HTTP模块

    • ngxhttpaddition #在响应请求的页面开始或者结尾添加文本信息

    • ngxhttpdegradation #在低内存的状况下容许服务器返回444或者204错误

    • ngxhttpperl

    • ngxhttpflv #支持将Flash多媒体信息按照流文件传输,能够根据客户端指定的开始位置返回Flash

    • ngxhttpgeoip #支持解析基于GeoIP数据库的客户端请求

    • ngxgoogleperftools

    • ngxhttpgzip #gzip压缩请求的响应

    • ngxhttpgzip_static #搜索并使用预压缩的以.gz为后缀的文件代替通常文件响应客户端请求

    • ngxhttpimage_filter #支持改变png,jpeg,gif图片的尺寸和旋转方向

    • ngxhttpmp4 #支持.mp4,.m4v,.m4a等多媒体信息按照流文件传输,常与ngxhttpflv一块儿使用

    • ngxhttprandom_index #当收到/结尾的请求时,在指定目录下随机选择一个文件做为index

    • ngxhttpsecure_link #支持对请求连接的有效性检查

    • ngxhttpssl #支持https

    • ngxhttpstub_status

    • ngxhttpsub_module #使用指定的字符串替换响应中的信息

    • ngxhttpdav #支持HTTP和WebDAV协议中的PUT/DELETE/MKCOL/COPY/MOVE方法

    • ngxhttpxslt #将XML响应信息使用XSLT进行转换

  • 邮件服务模块

    • ngxmailcore

    • ngxmailpop3

    • ngxmailimap

    • ngxmailsmtp

    • ngxmailauth_http

    • ngxmailproxy

    • ngxmailssl

  • 第三方模块

    • echo-nginx-module #支持在nginx配置文件中使用echo/sleep/time/exec等类Shell命令

    • memc-nginx-module

    • rds-json-nginx-module #使nginx支持json数据的处理

    • lua-nginx-module

Nginx的web请求处理机制

做为服务器软件,必须具有并行处理多个客户端的请求的能力, 工做方式主要如下3种:

  • 多进程(Apache)

    • 优势: 设计和实现简单;子进程独立

    • 缺点: 生成一个子进程要内存复制, 在资源和时间上形成额外开销

  • 多线程(IIS)

    • 优势: 开销小

    • 缺点: 开发者本身要对内存进行管理;线程之间会相互影响

  • 异步方式(Nginx)

常常说道异步非阻塞这个概念, 包含两层含义:

通讯模式:

  • 同步: 发送方发送完请求后,等待并接受对方的回应后,再发送下个请求

  • 异步: 发送方发送完请求后,没必要等待,直接发送下个请求

Nginx的事件驱动模型

相关文章
相关标签/搜索