在Linux中,Nginx默认被安装在目录 /usr/local/nginx
中,其中二进制文件路径为 /usr/local/nginx/sbin/nignx
,配置文件路径为 /usr/local/nginx/conf/nginx.conf
。
注:在
configure
执行时是可以指定把它们安装在不同的目录的。
1、默认方式启动
直接执行Nginx二进制程序:
/usr/local/nginx/sbin/nginx/sbin/nginx
这时,会读取默认路径下的配置文件: /usr/local/nginx/conf/nginx.conf
实际上,在没有显式指定 nginx.conf 配置文件路径时,将打开 configure
命令执行时使用 --conf-path=PATH
指定nginx.conf文件
2、另行指定配置文件的启动方式
/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf
这时,会读取 -c
参数后指定的nginx.conf配置文件来启动Nginx.
3、另行指定安装目录的启动方式
使用 -p
参数指定Nginx的安装目录
/usr/local/nginx/sbin/nginx -p /usr/local/nginx/
4、另行指定全局配置项的启动方式
可以通过 -g
参数临时指定一些全局配置项,以使新的配置项生效
/usr/local/nginx/sbin/nginx -g "pid /var/nginx/test.pid"
上面这行命令意味着会把pid文件写到 /var/nginx/test.pid
中
-g
参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否则无法启动。就像上例那样,类似这样的配置项: pid /var/nginx/test.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文件,也会出现无法停止服务端情况。
5、测试配置信息是否错误
在不启动Nginx的情况下,使用 -t
参数仅测试配置文件是否有错误:
/usr/local/nginx/sbin/nginx -t
执行结果中显式配置是否正确
6、在测试配置阶段不输出信息
测试配置选项时,使用 -q
参数可以不把error级别以下的信息输出到屏幕
/usr/local/nginx/sbin/nginx/ -t -q
7、显示版本信息
使用 -v
参数显示Nginx的版本信息
/usr/local/nginx/sbin/nginx -v
8、显示编译阶段的参数
使用 -V
参数除了可以显示Nginx的版本信息外,还可以显示配置编译阶段的信息,如 GCC编译器的版本、操作系统的版本、执行 configure
时的参数 等:
/usr/local/nginx/sbin/nginx -V
9、快速的停止服务
使用 -s stop
可以强制停止Nginx服务。 -s
参数其实是告诉Nginx程序向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到的master进程的进程ID,再向运行中的master进行发送TERM信号来快速的关闭Nginx服务
/usr/local/nginx/sbin/nginx -s stop
实际上,如果通过 kill
命令直接向nginx master进程发送TERM或者INT信号,效果是一样的
先通过 ps
命令来查看nginx master的进程ID
[root@VM_0_16_centos ~]# ps -ef | grep nginx
root 1413 1 0 2021 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 1414 1413 0 2021 ? 00:18:51 nginx: worker process
root 26388 26323 0 13:52 pts/0 00:00:00 grep --color=auto nginx
接下来直接通过 kill
命令来发送信号:
kill -s SIGTERM 1413
或者
kill -s SIGINT 1413
上面两条命令的效果与执行 /usr/local/nginx/sbin/nginx -s stop
是完全一致的
10、优雅的停止服务
如果系统Nginx服务可以正常的处理完当前所有请求再停止服务,那么可以使用 -s quit
参数来停止服务
/usr/local/nginx/sbin/nginx -s quit
该命令与快速停止Nginx服务是有区别的。当快速停止服务时,worker进程与master进程在收到信号后会立刻跳出循环,退出进程。而优雅的停止服务时,首先会关闭监听端口,停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。
与快速停止服务类似,可以直接发送QUIT信息给master进程来停止服务,其效果与执行 -s quit
命令是一样的
kill -s SIGQUIT <nginx master pid>
如果希望优雅的停止某个worker进程,那么可以通过向该进程发送WINCH信号来停止服务
kill -s SIGWINCH <nginx worker pid>
11、使运行中的Nginx重读配置项并生效
使用 -s reload
参数可以使运行中的Nginx服务重新加载nginx.conf文件
/usr/local/nginx/sbin/nginx -s reload
事实上Nginx会先检查新的配置项是否有误,如果全部正确就可以采取优雅的方式关闭,再重新启动Nginx来实现这个目的。类似的, -s
是发送信号,仍然可以使用 kill
命令发送HUP信号来达到相同的效果
kill -s SIGHUP <nginx master pid>
12、日志文件回滚
使用 -s reopen
参数可以重新打开日志文件,这样可以先把当前日志文件改名或者转移到其他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过大
/usr/local/nginx/sbin/nginx -s reopen
当然这与使用 kill
命令发送USR1信号效果相同
kill -s SIGUSR1 <nginx master pid>
13、平滑升级Nginx
当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级
升级时包括以下步骤:
-
通知正在运行的旧版本Nginx准备升级。通过向master进程发送USR2信号可达到目的
kill -s SIGUSR2 <nginx master pid>
这时运行中的Nginx会将pid文件重命名,如将
/usr/local/nginx/logs/nginx.pid
重命名为/usr/local/nginx/logs/nginx.pid.oldbin
,这样新的Nginx才有可能启动成功 -
启动新版本的Nginx,可以使用上面任意一种启动方法。这时通过ps命令可以发现新旧版本的Nginx在同时运行。
-
通过
kill
命令向旧版本的master进程发送SIGQUIT信号,以优雅的方式关闭旧版本的Nginx。随后将只有新版本的Nginx服务运行,此时平滑升级完毕。
14、显示命令行帮助
使用 -h
或者 -?
参数会显示支持的所有命令行参数