在Linux中,需要使用命令来控制Nginx服务器的启动与停止、重载配置文件、回滚日志文件,平滑升级等行为。默认情况下,Nginx被安装在目录/usr/local/nginx/中,其二进制文件路径为/usr/local/nginx/sbin/nginx,配置文件路径为/usr/local/nginx/conf/nginx.conf。当然,在configure执行时可以指定把它们安装在不同的目录。
默认方式启动
直接执行Nginx二进制程序。例如:
/usr/local/nginx/sbin/nginx
这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。
实际上,在没有显示指定nginx.conf配置文件路径时,将打开在configure命令执行时使用--conf-path=PATH 指定的nginx文件。
另行指定配置文件的启动方式
使用-c参数指定配置文件。例如:
/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
这时,会读取 -c 参数后指定的 nginx.conf 配置文件来启动 Nginx。
另行指定安装目录的启动方式
使用-p参数指定安装目录的启动方式。例如:
./nginx -p /usr/local/nginx
另行指定全局配置项的启动方式
可以通过 -g 参数临时指定一些全局配置项,以使新的配置项生效。例如:
./nginx -g "pid /var/nginx/test.pid;"
上面这行命令意味着会把pid文件写到 /var/nginx/test.pid 中。
-g 参数的约束条件是指定的配置项不能与默认路径下的 nginx.conf 中的配置项相冲突,否则无法启动。就像上例那样,类似这样的配置项: pid logs/nginx.pid ,是不能存在于默认的nginx.conf 中的。
另一个约束条件是,以-g方式启动的Nginx服务执行其他命令行时,需要把-g参数也带上,否则可能出现配置项不匹配的情形。例如,如果要停止Nginx服务,那么需要执行下面代码:
/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid;" -s stop
如果不带上-g "pid /var/nginx/test.pid;",那么找不到pid文件,也会出现无法停止服务的情况。
测试配置信息是否错误
在不启动Nginx的情况下,使用 -t 参数仅测试配置文件是否有错误。例如:
./nginx -t
a123456 sbin % sudo ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
执行结果中显示配置是否正确
显示版本信息
使用-v参数显示Nginx的版本信息。例如:
a123456 sbin % ./nginx -v
nginx version: nginx/1.25.4
显示编译阶段的参数
使用 -V 参数除了可以显示 Nginx 的版本信息外,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统的版本、执行 configure 时的参数等。例如:
a123456@luludeMacBook-Pro-2 sbin % ./nginx -V
nginx version: nginx/1.25.4
built by clang 12.0.5 (clang-1205.0.22.11)
configure arguments: --without-http_rewrite_module
快速地停止服务
使用 -s stop 可以强制停止 Nginx 服务。-s 参数其实是告诉 Nginx 程序向正在运行的 Nginx 服务发送信号量,Nginx 程序通过 nginx.pid 文件中得到 master 进程的进程ID,再向运行中的 master 进程发送 TERM 信号来快速地关闭 Nginx 服务。例如:
a123456 sbin % sudo ./nginx -s stop
实际上,如果通过 kill 命令直接向 nginx master 进程发送 TERM 或者 INT 信号,效果是一样的。例如:先通过 ps 命令来查看 nginx master 的进程ID:
a123456@luludeMacBook-Pro-2 sbin % ps -ef | grep nginx
501 1179 486 0 11:31上午 ttys002 0:00.01 grep nginx
接下来直接通过 kill 命令来发送信号:
a123456 sbin % kill -s sigterm 486
或者:
a123456 sbin % kill -s sigint 486
优雅地停止服务
如果希望 Nginx 服务可以正常地处理完当前所有请求再停止服务,那么可以使用 -s quit 参数来停止服务。例如:
a123456 sbin % sudo ./nginx -s quit
该命令与快速停止 Nginx 服务是有区别的。当快速停止服务时,worker 进程与 master进程在收到信号后会立刻跳出循环,退出进程。而优雅地停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。
与快速停止服务类似,可以直接发送 quit 信号给master 进程来停止服务,其效果与执行 -s quit 命令是一样的。例如:
kill -s sigquit <nginx master piad>
使运行中的 Nginx 重读配置项并生效
使用 -s reload 参数 可以使运行中的 Nginx 服务重新加载 nginx.conf 文件。例如:
./nginx -s reload
事实上,Nginx 会先检查新的配置项是否有误,如果全部正确就以优雅的方式关闭,再重新启动 Nginx 来实现这个目的。类似的,-s 是发送信号,来然可以用 kill 命令发送 HUP 信号来到达相同的效果。
kill -s sighup <nginx master pid>
日志文件回滚
使用 -s reopen 参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开是就会生成新的日志文件。这个功能使得日志文件不至于过大,例如:
a123456 sbin % sudo ./nginx -s reopen
平滑升级Nginx
当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是必须要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。
升级时包括以下步骤:
1、通知正在运行的旧版本Nginx 准备升级。通过向master进程发送 USR2 信号可以达到目的,例如:
kill -s sigusr2 <nginx master pid>
2、重启新版本的 Nginx 会将 pid 文件重命名,如将 /usr/local/nginx/logs/nginx.pid 重命名为/usr/local/nginx/logs/nginx.pid.oldbin,这样新的Nginx才有可能启动成功。启动新版本的Nginx,可以使用以上介绍的任意一种启动方法。这时通过ps 命令 可以发现新旧版本的Nginx 在同时运行。
3、通过kill 命令向旧版本的 master 进程发送 SIGQUIT 信号,以优雅的方式关闭旧版本的Nginx,随后将只有新版本的Nginx服务运行,此时平滑升级完毕。
查询Nginx进程
a123456 sbin % ps -ef | grep 'nginx'
0 1716 1 0 1:38下午 ?? 0:00.00 nginx: master process ./nginx
-2 1721 1716 0 1:38下午 ?? 0:00.00 nginx: worker process
501 1859 486 0 1:59下午 ttys002 0:00.01 grep nginx
本文暂时没有评论,来添加一个吧(●'◡'●)