商务合作加Q:411239339

一步一步深入理解Nginx(三)解读Nginx命令行参数

浏览:599次阅读
没有评论

共计 2893 个字符,预计需要花费 8 分钟才能阅读完成。

 

前面两节我们学习了 Nginx 的安装,以及如何配置 php-fpm 模块进行 PHP 网页脚本的解析,接下来我们再来看一看 nginx 二进制参数有哪些。现在网络上很多关于 Nginx 的讲解,一上来就是以一套庞大的编译命令,冗长的配置讲解,再辅以高大上的架构图,瞬间把你以万伏的高压电击晕。我写这个系列的文章只是让大家能感觉到以玩的心态来进行学习,每一条命令,每一条配置我都会亲自进行实验,确定正确无误后再贴出来,有些比较复杂的配置以及脚本,我就先提前写好,让大家能迅速体验到成就感,我觉得这样学习才有乐趣。


1、Nginx 默认启动时都做了些什么

前面我们已经把 nginx 二进制安装到 /usr/local/nginx/sbin 中了,当我们直接运行 /usr/local/nginx/sbin/nginx 时,会发生什么呢?

答:什么也没有发生,也没有任何输出。

那么它在后台默默的做了什么事情呢?

这里果子将教你使用一个神器:strace 命令,我们执行如下命令:

strace /usr/local/nginx/sbin/nginx > nginx.strace 2>&1

  接下来,我们再用 vim 打开,我截取了部分内容,如下图,可以发现,它默认加载了 /usr/local/nginx/nginx.conf 配置,以及打开了 /usr/local/nginx/error.log 日志:

一步一步深入理解 Nginx(三)解读 Nginx 命令行参数

 

那么有童鞋就会问了,果子你到底想说明什么?

如果细心的朋友可能会发现了,这两个路径其实分别就是我们 --config-path 和 --error-log-path 两个选项指定的文件路径,还有些其它选项我们就不一一列举了,有兴趣的朋友可自行查阅。

到这里,我们可以得出结论:直接运行 nginx 二进制文件时,它根据配置选项来作为默认参数执行。

为了方便我们下文讲解,我们再来看下其它参数:

[root@localhost tmp]# /usr/local/nginx/sbin/nginx -h
nginx version: nginx/1.8.0
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit    #显示版本信息后退出
  -V            : show version and configure options then exit  #显示编译选项,这个很有用,当下次编译时就可以直接复制过来配置并编译了。-t            : test configuration and exit   #测试配置文件是否正确
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing  #测试配置文件时不显示错误信息到终端
  -s signal     : send signal to a master process: stop, quit, reopen, reload  #向 nginx 发送信号
  -p prefix     : set prefix path (default: /usr/local/nginx/)  #指定安装路径
  -c filename   : set configuration file (default: /usr/local/nginx/nginx.conf) #指定配置文件路径
  -g directives : set global directives out of configuration file  #设置全局选项

2、指定配置文件运行

我们可以通过 - c 选项来指定一个自定义的配置文件,比如 /etc/nginx.conf 文件时,我们可以这样运行:

/usr/local/nginx/sbin/nginx -c /etc/nginx.conf

其它选项请大家自行测试。

3、有用的参数选项

接下来我们说一些生产环境中经常用到的选项。

 

1) 强制停止服务

 

-s stop 可以强制停止 nginx 服务。- s 选项其实是告诉 nginx 程序向正在运行的 Nginx 服务发送停止的信号量。nginx 程序通过 nginx.pid 文件中得到的 master 主进程 ID,再向这个进程 ID 发送 TERM 信号来快速地关闭服务。

 

2) “ 优雅 ” 的停止服务

 

何谓 “ 优雅 ”?就是告诉 Nginx,请你正常处理完手上现有的请求后,再停止主进程。为什么可以这样做到呢?因为 nginx 是一个主进程程序用来负责调度、分发配置,然后有 N 个子进程在向外提供服务,当主进程接收到要 “ 优雅 ” 停止服务后,它对于新的连接请求不再接收,而是专心把当前的服务处理完毕,然后打卡下班走人。

我们可以使用 -s quit 来进行 “ 优雅 ” 地停止服务。这种方式显得很温和,且会正常处理完客户端已经连接的请求,上一种强制停止的话有可能会丢失一些客户端已经上报上来的数据,所以在生产环境中这种方式比较必要的。

 

3) 我修改配置了,不想停止服务怎么办

 

别急,nginx 也为我们提供了方式,我们可以使用 -s reload 选项重新让 nginx 的 master 进程加载一下指定的配置文件 nginx.conf。事实上,nginx 在执行这个选项之前,做了几个事情,它全首先检查配置是否正确,如果正确就以 “ 优雅 ” 的方式关闭,再重新启动 nginx 来实现这个目的。

 

4) 我把 nginx 日志删除了,它不会生成了怎么办

 

当我们把 nginx 的日志文件删除后,正在运行的进程打开的还是之前文件的句柄,这个句柄已然无效,帮不会生成日志文件了,我们可以使用 -s reopen 参数可以重新打开日志文件,这样我们可以先把当前日志文件改名或转移到其它目录中进行备份,再重新打开时就会生成新的日志文件。

 

5) 我的 nginx 重新编译了,能不能平滑升级

 

答案是可以的。这种情况常见于密集的互联网服务请求,你想一下,当某抢购网站用户正在热火朝天的进行抢购时,你突然间停止几秒钟服务,那样会造成多大的流量损失。

我们可以这样发送命令:

 

kill -s SIGUSER2 PID
#其中 PID 为 nginx 的 master 进程 ID,如下命令可以查看到 master 进程 ID 为 8183
[root@localhost tmp]# ps aux | grep nginx    
root       8183  0.0  0.0  44756   960 ?        Ss   04:55   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www        8184  0.0  0.0  45128  1680 ?        S    04:55   0:00 nginx: worker process                   
root       8186  0.0  0.0 103244   844 pts/0    S+   04:55   0:00 grep nginx

当发送这个命令后,nginx 主进程会将 nginx.pid 文件重命名为 nginx.pid.oldbin,此时我们再将新的 nginx 文件替换掉旧的二进制文件,再以 “ 优雅 ” 的方式结束进程,再启动新版本程序即可。

4、总结

本节介绍了 Nginx 命令行参数的作用以及在什么场景下使用这些参数,在学习参数的同时,我们也可以思考下,如果是让我们写这么一个程序,我们如何做到这些强大的功能呢?

 

正文完
扫码赞助
post-qrcode
 0
果子
版权声明:本站原创文章,由 果子 于2015-12-29发表,共计2893字。
转载说明:除特殊说明外本站文章皆由果较瘦原创发布,转载请注明出处。
评论(没有评论)