Nginx 一点一滴 03 - 架构机制
Nginx服务器架构
模块化结构
Nginx 服务器的开发
完全
遵循模块化设计思想
什么是模块化开发?
单一职责原则,一个模块只负责一个功能
将程序分解,自顶向下,逐步求精
高内聚,低耦合
Nginx的模块化结构
核心模块: Nginx最基本最核心的服务,如进程管理、权限控制、日志记录;
标准HTTP模块: Nginx服务器的标准HTTP功能;
可选HTTP模块: 处理特殊的HTTP请求
邮件服务模块: 邮件服务
第三方模块: 作为扩展,完成特殊功能
Nginx的模块清单
核心模块
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
;如开启,则用之,否则用autoindexngxhttpauthbasic #基于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)
经常说道异步非阻塞这个概念, 包含两层含义:
通信模式:
同步: 发送方发送完请求后,等待并接受对方的回应后,再发送下个请求
异步: 发送方发送完请求后,不必等待,直接发送下个请求