Using Nginx

Aug 19, 2015

以下是一些学习使用Nginx的一些心得,相关笔记大多来自PACKT的《Nginx HTTP Server, 2nd Edition

##安装 Nginx

##常用 Nginx 命令行 根据自己的Nginx安装目录,以下命令是在本文安装目录/usr/local/nginx/sbin中执行。

上面的 pid 是Nginx的主进程号,可以通过 **ps aux grep nginx **查看 master process 进程或者查看Nginx安装目录下的logs目录下的nginx.pid文件可以获得。也可以在命令行中用 **cat /usr/local/nginx/logs/nginx.pid **代替。

##测试配置文件

在修改完配置文件后,如需检测配置文件的语法是否正确,可以通过以下命令进行检测:


  /usr/local/nginx/sbin/nginx –t

配置文件语法通过则提示成功,若有错误则会提示在哪个地方出现错误。值得注意的是,在线上环境直接测试正在使用的配置文件是不恰当的,这种情况通过 -c 参数测试另外一个配置文件,命令如下:


  /usr/local/nginx/sbin/nginx -t -c /your/testconf/path/nginx.conf

测试确认通过后可执行完成线上环境的配置文件修改。


  cp -i /your/testconf/path/nginx.conf /usr/local/nginx/conf/nginx.conf

  /usr/local/nginx/sbin/nginx -s reload

##平滑升级 Nginx 在升级Nginx过程中经常会有这样的操作,关闭服务器,替换sbin目录下的二进制文件,重新开启服务器,这对于业务不多的网站来说是可行的,但是对于大网站来说会导致大量的连接丢失和业务中断,Nginx提供了一个机制允许在替换二进制文件的过程中保证不丢失连接。 在上面提到过kill 命令后加上信号量和pid可对 Nginx 进行控制,这里需要USR2WINCH这两个信号量,具体过程如下:

  1. 用新的二进制文件替换安装目录下的文件/usr/local/nginx/sbin/nginx
  2. 执行命令cat /usr/local/nginx/logs/nginx.pid查看pid进程号
  3. 执行命令kill USR2 pid,初始化升级,保持旧的 .pid 文件和启用新的nginx二进制文件
  4. 执行命令kill WINCH pid,关闭旧的 worker progresses
  5. 确保所有的 worker progresses 都关闭之后,执行命令kill QUIT pid

至此,Nginx已经平滑地升级成功。