简介
Nginx由俄罗斯人Igor Sysoev编写的一款高性能的HTTP和反向代理服务器。能够选择高效的epoll、kqueue、eventport作为网络 IO模型,支持高连接并发情况下内存、CPU等系统资源消耗都非常低。
淘宝Tengine: 基于nginx,添加了很多高级功能和特性。
优点
- 支持高并发
- 支持热部署
- 稳定性高
- 耗内存少
特性
- 异步非阻塞,事件驱动
- 单线程多进程,绑定CPU,减少上下文切换
- 模块化,官方、第三方模块多,易扩充
- 静态编译,不能动态加载(1.9版本已支持动态加载)
- 支持热部署:升级Nginx,更新配置
Nginx信号控制
支持以下几种信号
- TERM, INT快速关闭
- QUIT 从容关闭
- HUP 平滑重启,重新加载配置文件
- USR1 重新打开日志文件,在切割日志时用途较大
- USR2 平滑升级可执行程序
- WINCH 从容关闭工作进程
几种命令
启动Nginx
nginx [-c filename] [-p prefix] [-g directives]
会创建一个master进程和多个worker进程停止Nginx
nginx -s stop:立即停止
nginx -s quit:从容停止,先关闭监听socket,但处理完已连接socket再停重新加载配置文件
nginx -s reload
master进程重新读取配置文件、重新打开日志文件
master进程fork创建新的worker进程,worker进程马上处理客户端请求
master进程给所有老的worker进程发NGX_CMD_QUIT命令
收到NGX_CMD_QUIT命令的老的worker进程会退出
Nginx平滑升级
当需要将正在运行中的Nginx升级、添加、删除服务器模块时,可以在不中断服务的情况下,使用新版本、重编译的nginx可执行程序替换旧版本的可执行程序。步骤如下:
1 . 使用新的可执行程序替换旧的可执行程序,对于编译安装的nginx,可以将新版本编译安装到旧版本nginx的安装路径中,替换之前,最好备份一下旧的可执行文件
2 . 发送以下指令:
kill -USR2 旧版本nginx主进程号
旧版本nginx主进行将重命名它的.pid文件为.oldbin, 然后执行新版本nginx可执行程序,依次启动新的主进程和新的工作进程
新、旧版本的nginx实例会同时运行,共同处理输入的请求。
3 . kill -WINCH 旧版本nginx主进程号: 从容关闭旧的工作进程,此时会通知旧worker进程从容退出,但旧master进程不退出且没关闭监听socket, 这时有老master进程、新master进程、新worker进程
4 . 一段时间后,旧工作进程处理了所有已连接的请求后退出,仅由新的工作进程来处理输入的请求。
5 . 如果新版本没有问题:kill -QUIT 旧master进程PID:给旧master进程发QUIT信号, 这时旧master会退出,只有新mast