nginx高性能的web服务器
nginx可以作为http服务器,也可以作为反向代理服务器或者邮件服务器,能够快速响应静态网页的请求,支持FastCGI/SSL/URL/Rwrite/Gzip/http basic或者tcp的负载均衡(1.9版本以上开启stream模块可以使用)等功能,支持第三方扩展
1.nginx的基本访问流程
nginx使用多进程模型来对外提供服务,一个master进程和多个worker进程,master进程负责管理nginx的启动/关闭命令和其他worker进程。所有实际上的业务处理逻辑都在worker进程。worker进程中有一个函数,执行无限循环,不断处理收到的来自客户端的请求,并行处理,直到整个nginx服务器被停止。
2.nginx的三种工作模型
prefork:进程模型,两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求。
worker:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求,当使用keepalive的长连接方式,某个线程会一致被占据,即使没有传输数据,也需要一直等待到超时才会被释放。
event:线程模型,三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求,但是增加了一个监听线程,用于解决在设置了keep-alived场景下线程的空等待问题。
2.1prefork,worker,event模型的优缺点
优点 | 缺点 | |
---|---|---|
prefork模型 | 相对稳定,适合用于访问量不是很大的场景 | 占用资源,1024个进程不适合用于高并发场景 |
worker模型 | 相比于prefork占用的内存少,可以同时处理多个请求 | 使用keepalive长连接方式会导致资源被浪费 |
event模型 | 单线程响应多请求,占据更少的内存,高并发下表现优秀,会有一个专门的线程来管理空等待线程 | 没有线程安全控制机制,没办法监听线程的存活 |
3.nginx的基础特性
特性:
模块化设计,较好的扩展性
高可靠性
支持热部署:不停机更新配置文件,升级版本,更换日志文件
低内存消耗:1w个keep-alive连接模式下的非活动连接,仅需2.5m内存
基本功能:
静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(LNMP),uWSGI(python)等协议
模块化,如zip,ssl模块