Nginx 官方文档翻译
来源:互联网 发布:货源软件是什么 编辑:程序博客网 时间:2024/05/16 19:10
Nginx 官方文档翻译 - nginx 控制
改变配置
可以用信号控制nginx。主进程的ID默认情况下被写入/usr/local/nginx/logs/nginx.pid文件。这个名字可以在配置时修改或者在nginx.conf文件中使用pid指令。
主进程支持以下信号:
- TERM, INT - 快速关闭- QUIT - 友好的关闭- HUP - 修改配置,保持一个时区的改变(仅FreeBSD&Linux),友好的关闭旧的工作进程,使用新配置创建新的工作进程- USR1 - 重新打开日志文件- USR2 - 升级可执行文件(nginx主程序)- WINCH - 友好的关闭所有的工作进程
尽管你不必自己操作工作进程,但是它们也支持一些信号::
- TERM, INT 快速关机- QUIT 正常关机- USR1 重新打开日志文件- WINCH 调试异常终止(要求debug_points 可用)
修改配置文件
为了让nginx重读配置文件,一个HUP信号应该被发送到主进程。主进程首先检查语法的有效性,然后试图应用新的配置,即打开日志文件和新的监听套接字。如果失败,它会回滚变化的地方,并继续使用旧的配置。如果成功了,它会开启新的工作进程,并向旧的进程发送正常关机的消息。旧的工作进程关闭监听的套接字并继续服务旧的客户端。当服务完所有的客户端,旧的工作进程会关闭。
让我们通过示例来说明。假设nginx是运行在FreeBSD 4.x 上的,这个命令是:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx33127 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)33128 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)33129 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)
当”HUP“signal发送给nginx主进程,输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx33129 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx)33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
上面可以发现,33129的工作进程,仍然在继续工作。一段时间后,输出如下:
PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
此时,所有的旧的工作进程,都已经全部关闭。
日志文件轮询
为了轮询日志文件,这些日志文件首先应该被重命名(轮询的日志文件命名有一定的规律)。接着,发送”USR1“signal给主进程。主进程将重新打开所有当前打开的日志文件,并且分配给它们一个没有特权的用户作为owner用户(工程进行的运行用户,例如上节中的nobody)。重新打开成功后,主进程关闭所有打开的文件,并发送消息给工作进程,要求它们去重新打开日志文件。工作进程打开新文件,并马上关闭旧文件。结果,旧文件几乎立马可用于后处理,例如:压缩。
在线升级可执行文件
为了升级服务器,新的可执行文件应该首先被写入到旧文件中。接着,发送”USR2“signal给主进程。主进程首先重命名 ”存储进程ID的文件“(/usr/local/nginx/logs/nginx.pid)为一个新文件,后缀是”.oldbin“(/usr/local/nginx/logs/nginx.pid.oldbin),接着,启动一个新的可执行文件,反过来,再启动新的工作进程:
PID PPID USER %CPU VSZ WCHAN COMMAND33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)33135 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)36264 33126 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
之后,所有的工作进程(新的&旧的)继续接收请求。如果 ”WINCH“ signal发送给第一个主进程,它将发送消息给它的子工作进程,请求它们友好的关闭,然后子工作进程开始关闭:
一段时间后,只有新的工作进程来处理请求:
注意:旧的主进程并没有关闭它监听的sockets,当需要时,它仍然能够开启它的子工作进程。如果,由于某些原因,新的可执行文件工作不正常,可执行下面的一个:
- 发送”HUP“signal给旧的主进程。旧的主进程,不用重新读取配置,并开启新的工作进程。之后,发送”QUIT“signal给新的主进程,新的进程将被友好的关闭。
- 发送”TERM“signal给新的主进程。将发送消息给它的工作进程,要求它们迅速退出,新的工作进程迅速退出(如果因为某些原因,新的进程并未退出,应该发送”KILL“signal,强制它们退出)。当新的主进程退出,旧的主进程将自动的开启新的工作进程。
如果新的主进程退出,然后旧的主进程忽略 ”.oldbin“ 后缀文件。
如果升级成功,之后应该发送”QUIT“signal给旧的主进程,最后,只有新的进程会被保留下来:
PID PPID USER %CPU VSZ WCHAN COMMAND36264 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx36265 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36266 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)36267 36264 nobody 0.0 1364 kqread nginx: worker process (nginx)
- Nginx 官方文档翻译
- Nginx 官方文档翻译
- Nginx 官方文档翻译
- Nginx 官方文档翻译
- 0.Nginx官方文档翻译-目录
- nginx的rewrite模块官方英文文档的节选翻译
- JNI 官方文档翻译
- FullCalendar 官方文档翻译
- monkeyrunner官方文档翻译
- FullCalendar 官方文档翻译
- FullCalendar 官方文档翻译
- NSLayoutContraint 官方文档翻译
- NSPredicate官方文档翻译
- FullCalendar 官方文档翻译
- MifareUltralight官方文档翻译
- ViewPager官方文档翻译
- NSPredicate官方文档翻译
- hbase 官方文档翻译
- OpenCV学习笔记(一) 轮廓检测
- java.lang.IllegalStateException: BeanFactory not initialized or already closed
- oracle12C RAC GI + UDEV + ASM 在centos6下安装详细步骤
- Hibernate项目简单配置
- LeetCode#547 Friend Circles题解(C++版)
- Nginx 官方文档翻译
- 新浪微博正在审核的开发者平台应用添加测试账号
- python之enumerate()说明
- 51nod1264(计算几何入门题)
- 周总结
- 项目步骤——类图
- TensorFlow学习_(1)TensorFlow安装(Mac)
- 1011. A+B和C (15)
- Button设置监听的三种方式