Nginx (web server, web reverse proxy)
MIME:Multipurpose Internet Mail Extension
httpd:MPM
多进程模型:prefork, 一个进程响应一个用户请求,并发使用多个进程实现;
多线程模型:worker, 一个进程生成多个线程,一个线程响应一个用户请求;并发使用多个线程实现;n进程,n*m个线程;
事件模型:event, 一个线程响应多个用户请求,基于事件驱动机制来维持多个用户请求;
I/O类型:
同步和异步:synchronous,asynchronous
关注的是消息通知机制
同步:调用发出之后不会立即返回,但一旦返回,则返回即是最终结果;
异步:调用发出之后,被调用方立即返回消息,但返回的并非最终结果;被调用者通过状态、通知机制等来通知调用者,或通过回调函数来处理结果;
阻塞和非阻塞:block,noblock
关注的是调用者等待被调用者返回调用结果时的状态
阻塞:调用结果返回之衫,调用者会被挂起;调用者只有在得到返回结果之后才能继续;
非阻塞:调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者;
I/O模型:
blocking IO:阻塞式IO
noblocking IO
IO multiplexing:复用型IO
select(),poll()
signal driven IO:事件驱动式IO
通知:
水平触发:多次通知;
边缘触发:只通知一次;
asynchronous IO:异步IO
Nginx:
Igor Sysoev,Rambler Media
Nginx:engine X
Tengine
Registry
libevent:高性能的网络库
epoll();
Nginx特性:
模块化设计、较好的扩展性;
高可靠
master --> worker
低内存消耗
10000个keep-alive模式下的connection,仅需2.5MB的内存;
劫持热部署
不停机更新配置文件、日志文件滚动,升级程序版本;
劫持事件驱动、AIO、mmap;
Nginx的基本架构:
一个master进程, 生成一个或多个worker进程;
事件驱动:kqueue, epoll(边缘触发), /dev/poll
复用器:select, poll, rt signal
支持sendfile, sendfile64
支持AIO
支持mmap
nginx的工作模式:非阻塞、事件驱动、由一个master进程生成多个worker线程,每个worker响应n个请求;
nginx的模块类别:
核心模块
标准http模块
可选的http模块
邮件模块
第三方扩展模块
安装方法:
源码:编译安装
制作好的程序包:rpm包
编译安装:
# useradd -r nginx
# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
# make && makeinstall
# mkdir -pv /var/tmp/nginx/{clent,fastcgi,proxy,uwsgi}
配置文件:
main配置段:全局配置段
event{ }:定义event模型工作特性
http{ }:定义http协议相关的配置
配置指令:要以分号结尾,语法格式;
directive value1 [ value2...]
支持使用变量:
内置变量:
模块会提供内建变量定义
自定义变量:
set var_name vlaue
主配置段的指令:
用于调试、定位问题
正常运行必备的配置
优化性能配置
事件相关配置