nginx文档阅读笔记之Beginner’s Guide

938 views

作为Beginer的指导,本文解决了几个问题:

  • 如何启动、停止nginx;
  • 在不重启nginx的条件下,如何重新加载配置文件;
  • 配置nginx使其响应静态文件的请求;
  • 配置nginx来作代理服务器;
  • 配置nginx,使其和FastCGI应用通信,这个暂时没有用到,先不关注;

nginx在运行时,包含一个主进程和几个工作者进程。其中主进程的职责是读取并加载配置文件,维护工作者进程;工作者进程则完成实际的http请求的处理。
nginx的工作方式、线程数量等参数由配置文件决定,默认情况下该文件名为nginx.conf,保存位置为/usr/local/nginx/conf、/etc/nginx/、/usr/local/etc/nginx。

启动、停止、重新加载配置

启动nginx很简单,在命令行下直接运行可执行文件即可。
nginx充分利用了unix环境下的信号机制,提供了友好的命令行操作接口,需要的注意的是,执行如下命令时需要使用启动nginx时的用户账号。

  • nginx -s stop,快速停止nginx全部进程。通过执行本命令,主进程向全部工作者进程发出退出运行的信号,工作者进程收到信号之后,中断当前用户请求的处理,直接退出运行;待全部工作者进程退出运行之后,主进程退出运行。
  • nginx -s quit,停止nginx全部进程,退出前完成已收到的http请求的处理。通过执行本命令,主进程向全部工作者进程发出退出运行的信号,工作者进程收到信号之后,继续响应当前请求,直至结束,然后退出运行;待全部工作者进程退出运行之后,主进程退出运行。
  • nginx -s reload,重新加载配置文件。在实现这个特性时,nginx采用的方案即简单又实用。在收到信号之后,主进程加载新的配置文件,并验证格式是否正确,如格式不正确,则中断加载,并回退到启动时使用的配置。如格式验证通过,则依据新的配置信息,启动新的工作者进程,并把接收到的请求转发给新的工作者进程处理;对于之前使用旧配置启动的工作者进程,则通知其完成当前请求的处理后退出运行。
  • nginx -s reopen,重新打开日志文件。nginx的日志能力相对于log4j还是要差一些,不能自动切换文件,不过理论上讲nginx记录的信息应该不会太多,为了保持实现的简单,用户在必要时帮助nginx完成切换,倒也不麻烦。

信号处理

在unix平台,可以基于操作系统提供的信号机制完成前述的操作,实际上在unix平台,前面提到的功能也的确是使用信号实现的。用户可以通过kill命令直接向nginx进程发送信号,主进程ID可以从/usr/local/nginx/logs/nginx.pid文件中获取;用户通过在nginx.conf文件使用pid指令可以修改主进程的进程ID保存的位置。
nginx主进程支持的信号列表:

  • TERM和INT,快速停止。
  • QUIT,完成当前请求之后停止。
  • HUP,重新加载配置文件,并使用新的配置启动新的工作者进程,停止基于旧配置启动的工作者进程。
  • USR1,重新打开日志文件。
  • USR2,升级nginx可执行程序。
  • WINCH,通知当前的工作者进程完成当前请求的处理之后退出。

nginx工作者进程支持的信号列表:

  • TERM和INT,快速停止。
  • QUIT,完成当前请求之后停止。
  • USR1,重新打开日志文件。
  • WINCH,调试时非正常退出。

nginx主进程加载配置文件的过程:

  1. 用户向主进程发送HUP信号。
  2. nginx主进程检查配置文件的语法。
  3. 如无效,说明配置文件语法存在问题,用户需要继续修改,nginx使用旧配置继续运行。
  4. 如有效,则尝试使用新配置生效,比如完成日志文件重新打开、服务端口的监听或者重新打开。
  5. 如失败,则回退配置信息,使用旧配置继续运行。
  6. 如成功,则主进程通知使用旧配置启动的工作者进程退出运行。收到请求的工作者进程在完成当前请求的处理之后,释放资源,退出运行。

配置文件

nginx的配置文件非常强大,配置全面,表达能力很强,其设计思路非常值得借鉴。
配置文件的内容由注释和指令构成。
以#开始的字符串都是注释,nginx解析时会自动忽略。
指令分为两种,简单指令和块指令。

  • 简单指令由名、值对构成,名和值中间使用空格分隔,结尾需要使用 ; 来结束。
  • 复杂指令的结构和简单指令类似,只是不以 ; 结尾,复杂指令使用一对 {} 结尾,中间包含了其它的指令。一对{}即形成指令的作用域。

灵活运用简单指令和复杂指令,可以构造出复杂的配置文件和强大的特性。

静态服务器

代理服务器



若非注明,均为原创,欢迎转载,转载请注明来源:nginx文档阅读笔记之Beginner’s Guide

关于 JackieAtHome

基层程序员,八年之后重新启航

此条目发表在 笔记 分类目录。将固定链接加入收藏夹。