`
icarusli
  • 浏览: 531166 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Nginx中文文档- 命令行参数和信号- 程序文件升级时的运行迁移

    博客分类:
  • WEB
阅读更多

不像许多其他软件系统,Nginx 仅有数个命令行参数,完全通过配置文件来配置(想象一下)。

  • [#options 选项]
  • [#example 示例]
  • [#lncus 使用信号加载新的配置]
  • [#utnbotf 平滑升级到新的二进制代码]

选项

-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的。

-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

-v 显示 nginx 的版本。

-V 显示 nginx 的版本,编译器版本和配置参数。

示例

这个示例仅测试指定位置的配置文件是否正常,并给出提示。

/usr/bin/nginx -t -c ~/mynginx.conf

通过系统的信号控制 Nginx

可以使用信号系统来控制主进程。默认,nginx 将其主进程的 pid 写入到 /usr/local/nginx/logs/nginx.pid 文件中。通过传递参数给 ./configure 或使用 pid 指令,来改变该文件的位置。

主进程可以处理以下的信号:

TERM, INT 快速关闭
QUIT 从容关闭
HUP 重载配置
用新的配置开始新的工作进程
从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序。
WINCH 从容关闭工作进程


尽管你不必自己操作工作进程,但是,它们也支持一些信号:

TERM, INT 快速关闭
QUIT 从容关闭
USR1 重新打开日志文件

 

使用信号加载新的配置

Nginx 支持几个信号,能在它运行时控制其操作。其中最普通的是 15 ,用来中止运行的进程:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf


而最有趣的是能平滑改变 nginx 配置的选项(请注意,在重载前,要先测试一下配置文件):

2006/09/16 13:07:10 [info]  15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2006/09/16 13:07:10 [info]  15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf


当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功的话,就应用新的配置文件(例如:重新打开日志文件或监听的套接字)。之后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。

RequestForReviewCategory -- (Request For Review: Just What Happens With The Worker Processes at a HUP? -Olle)

平滑升级到新的二进制代码

你可以在不中断服务的情况下 - 新的请求也不会丢失,使用新的 nginx 可执行程序替换旧的(当升级新版本或添加/删除服务器模块时)。

首先,使用新的可执行程序替换旧的(最好做好备份),然后,发送 USR2 (kill -USR2 pid)信号给主进程。主进程将重命名它的 .pid 文件为 .oldbin (比如:/usr/local/nginx/logs/nginx.pid.oldbin),然后执行新的可执行程序,依次启动新的主进程和新的工作进程:

 PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 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/nginx
36265 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 实例会同时运行,一起处理输入的请求。要逐步停止旧的实例,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 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)

一段时间后,旧的工作进程处理了所有已连接的请求后退出,就仅由新的工作进程来处理输入的请求了:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 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)

这时,因为旧的服务器还尚未关闭它监听的套接字,所以,通过下面的几步,你仍可以恢复旧的服务器:

  • 发送 HUP 信号给旧的主进程 - 它将在不重载配置文件的情况下启动它的工作进程
  • 发送 QUIT 信号给新的主进程,要求其从容关闭其工作进程
  • 发送 TERM 信号给新的主进程,迫使其退出
  • 如果因为某些原因新的工作进程不能退出,向其发送 KILL 信号

新的主进程退出后,旧的主进程会由移除 .oldbin 前缀,恢复为它的 .pid 文件,这样,一切就都恢复到升级之前了。

如果尝试升级成功,而你也希望保留新的服务器时,发送 QUIT 信号给旧的主进程使其退出而只留下新的服务器运行:

: PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
: 36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
: 36265 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)
http://www.nginxcn.com/doc/general/commandline.html
分享到:
评论

相关推荐

    zabbix学习文档

    - 方便配置文件的备份和迁移。 - 支持批量操作。 **Windows 安装 Zabbix 监控:** - 在Windows环境中安装Zabbix组件。 - 配置监控Windows服务器。 **Zabbix Windows 性能计数器使用详解:** - 监控Windows性能...

    Linux入门到高级

    - `/usr`: 存储应用程序和文档等共享资源。 - `/var`: 存储日志文件、数据库等可变数据。 - `/etc`: 配置文件的存放位置。 - **常用命令**: - `ls`: 列出目录内容。 - `cd`: 改变当前工作目录。 - `mkdir`: ...

    flask官方文档html版

    - 在生产环境中,推荐使用虚拟环境,并考虑使用Gunicorn + Nginx进行负载均衡和静态文件服务。 8. **安全(Security)** - CSRF保护:Flask-WTF扩展提供CSRF令牌防止跨站请求伪造攻击。 - 用户认证与授权:Flask...

    yii-advanced-app-2.0.10.tgz

    5. **console**:控制台应用程序目录,用于运行计划任务或数据迁移等后台操作。 6. **vendor**:第三方库和依赖包的存放地,由 Composer 管理。 7. **environments**:不同部署环境的配置模板,可以根据需要调整。...

    微信小程序后台内容管理程序laravelPCMS

    7. **API文档**:为了方便开发者使用,laravelPCMS通常会提供详细的API文档,列出所有可用的接口及其参数,帮助开发者快速理解和接入。 8. **安全机制**:Laravel框架内置了CSRF防护、XSS防护等安全特性,...

    Laravel基础入门篇

    - 使用Composer安装:通过命令行运行`composer create-project --prefer-dist laravel/laravel your-project-name`来快速创建一个新的Laravel项目。 - 配置数据库连接:编辑`.env`文件中的数据库设置。 - **项目...

    最新 tomcat 服务器

    升级过程需要注意数据迁移和配置文件的兼容性问题。 总的来说,Tomcat作为Java Web应用的首选服务器,以其简洁高效的特点深受开发者喜爱。掌握Tomcat的使用、配置和优化技巧,对于Java开发人员来说至关重要。

    php-7.1.13.tar.gz

    1. 配置文件:在安装完成后,需要编辑php.ini配置文件,根据实际需求调整PHP的运行参数。 2. PHP-FPM:7.1.13支持FastCGI进程管理器(PHP-FPM),它可以更好地处理HTTP请求,提高服务器响应速度。 3. 模块支持:根据...

    php 商户管理平台(容易部署)

    - **yii.bat和queue.bat**:这两个批处理文件通常用于执行PHP命令行脚本,例如Yii框架的运行或队列任务的启动。Yii是另一个流行的PHP框架,可能在这个项目中被用作ThinkPHP的补充或者用于特定的任务。 - **.env....

    Laravel开发-framework

    - **模型与迁移**:Eloquent提供了简单的方法来操作数据库,通过模型定义数据表结构,迁移文件则用于数据库版本控制。 - **关系映射**:Eloquent支持多种数据库关系,如一对一、一对多、多对多等,简化了数据库...

    Laravel开发-birdy .zip.zip

    3. **Artisan 命令行工具**:Laravel自带的Artisan命令行工具可以帮助开发者生成控制器、模型、迁移文件等,大大简化了日常开发任务。 4. **路由系统**:Laravel的路由系统允许开发者以简洁的方式定义HTTP请求的...

    互联网项目系统软件集成项目解决方案.doc

    这涉及到调整内核参数,如最大文件描述符数、TCP连接超时、内存分配策略等,以适应高并发和大数据量的场景。 总结来说,本解决方案旨在提供一个完整的互联网项目系统软件集成蓝图,从各个组件的安装、配置,到集群...

    最新版windows elasticsearch-7.9.1-windows-x86_64.zip

    9. **数据导入导出**:使用`bin/elasticsearch-transport-client`或者第三方工具如Logstash,可以方便地导入和导出数据,实现数据迁移和备份。 10. **监控与优化**:Elasticsearch提供了丰富的监控指标,用户可以...

    meedu v4.5.3 在线教育点播系统

    在实际运行前,你需要复制此文件并命名为`.env`,然后根据实际情况修改其中的参数。 `artisan` 是Laravel框架中的命令行工具,对于MeEdu的安装和维护非常关键。你可以使用`artisan`命令进行数据库迁移、种子数据...

    架构脑图.pdf

    - **常量**:在程序运行期间其值不会改变的量。 - **构造器**:用于初始化对象的特殊方法。 - **Math**:提供数学运算的静态方法。 - **super与this**:super关键字用于引用当前对象的直接父类中的成员,this关键字...

    Laravel开发-office .zip

    6. **Artisan命令行工具**:Laravel自带的Artisan提供了一系列的命令行工具,帮助开发者生成控制器、模型、迁移文件等,大大提高了开发效率。 7. **数据库迁移与填充**:Laravel的迁移系统允许开发者在多个环境中...

    ruby on rails

    8. **Rails更新与版本管理**:Rails版本更新频繁,每个新版本都会引入新的特性和改进,因此开发者需要关注官方文档,理解不同版本之间的差异,合理选择版本并进行迁移。 通过深入学习以上知识点,开发者可以高效地...

    Simple-API:用Laravel编写的简单API

    为了方便开发者使用API,应编写清晰的API文档,说明每个端点、请求类型、参数和响应格式。此外,使用PHPUnit或Dusk等工具对API进行单元测试和集成测试,确保其稳定性和正确性。 ### 9. 部署与优化 完成开发后,...

    Django-Blog:使用Django建立的网志

    - `manage.py`:这是一个命令行工具,用于执行各种管理任务,如创建数据库迁移、运行服务器等。 - `blog`:这是主要的应用程序目录,包含模型、视图、模板和URL配置等。 - `static` 和 `media`:分别用于存放静态...

    PHP Base Library (PHPBLib)-开源

    6. **运行**:通过Web服务器(如Apache或Nginx)部署应用,并访问指定的URL以启动服务。 ### 社区支持与学习资源 由于PHPBLib是开源项目,开发者可以在其官方文档、GitHub页面、社区论坛等平台上获取帮助、示例...

Global site tag (gtag.js) - Google Analytics