凌晨两点,服务器又报警了。你从被窝里爬起来,远程连上服务器,对着屏幕发呆三秒,然后默默敲下了那个熟悉的命令——
nginx -t。
别问我是怎么知道的。
搞服务器的,谁还没遇到过几次Nginx罢工的情况?今天不整虚的,直接上干活,聊聊我日常最常用的10个nginx命令。每一个都是真刀真枪跑过的,踩过的坑比吃过的盐还多。
1. nginx -t
这个必须放在第一位。

每次改完配置文件,我第一件事就是跑这条命令。它会帮你检查nginx.conf语法有没有写错,配置文件路径对不对。简直是防翻车神器。
nginx -t
如果配置没问题,它会输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
但凡有点问题,它会明明白白告诉你哪一行出错了。屡试不爽。
说白了,这就是nginx界的"体检报告"。改配置前不跑一下,等着的就是502 Bad Gateway。
2. nginx -s reload
改完配置,怎么让它生效?
别傻乎乎地kill掉所有进程再重启,用这个:
nginx -s reload
这是平滑重启,nginx会优雅地处理完当前请求,然后加载新配置。用户体验基本不受影响,网站不会挂。
有时候你会发现reload不生效——大概率是配置文件还有语法错误,先跑nginx -t检查一下。
3. nginx -s stop 和 nginx -s quit
这两个都是停nginx,但区别大了去了:
nginx -s stop:立即停止,不管有没有请求在处理。相当于拔电源。nginx -s quit:优雅停止,等所有请求处理完再停。体面退出。
我的习惯是:正常维护用quit,紧急救火用stop。
# 优雅停止
nginx -s quit
# 强制停止
nginx -s stop
4. nginx -c
指定启动时使用的配置文件。
默认情况下nginx会找/etc/nginx/nginx.conf,但如果你有多个站点,想用不同的配置跑测试:
nginx -c /etc/nginx/test.conf
本地调试多环境配置时,这个参数简直救大命。
5. nginx -v 和 nginx -V
想知道当前服务器上nginx版本?
nginx -v
输出:
nginx version: nginx/1.24.0
但如果你想知道编译时带了什么参数(比如装了什么模块),用大写的V:
nginx -V
输出会很长,包含--with-xxx、--prefix=之类的信息。排查模块缺失问题的时候,这个命令能帮上忙。
6. systemctl restart nginx
如果你的服务器用systemd管理(CentOS 7+、Ubuntu 16.04+),直接用这个最省事:
systemctl restart nginx
当然还有:
systemctl start nginx # 启动
systemctl stop nginx # 停止
systemctl status nginx # 查看状态
我个人经验:生产环境慎用restart,用reload更稳。除非你要换配置文件路径或者彻底重置。
7. killall nginx
有时候reload不顶用,nginx进程好像死赖着不走怎么办?
killall nginx
直接杀掉所有nginx进程。然后再nginx启动新的。
如果杀不掉,可能是有进程处于僵死状态,加个-9:
killall -9 nginx
温馨提示:生产环境慎用,动手前确保你有把握。
8. ps aux | grep nginx
想看nginx当前跑了几个进程,哪个PID是master,哪个是worker?
ps aux | grep nginx
输出大概是:
root 1234 0.0 0.0 51244 1456 ? Ss 02:00 0:00 nginx: master process nginx
www-data 1235 0.0 0.2 52488 3456 ? S 02:00 0:01 nginx: worker process
www-data 1236 0.0 0.2 52488 3456 ? S 02:00 0:01 nginx: worker process
排查连接问题、定位worker进程异常,这个命令比什么都好使。
9. nginx -g
想在启动时直接命令行覆盖配置项?
nginx -g 'worker_processes 4;'
比如临时改一下worker进程数,不用改配置文件就能生效。测试环境调试特别方便。
10. nginx -s reopen
日志文件被删了,nginx还在往里写怎么办?
nginx -s reopen
这会让nginx重新打开日志文件,继续写入。配合logrotate使用,效果更佳。
写在最后
其实nginx命令远不止这10个,但日常运维中,上面这些能覆盖90%以上的场景。
我的建议是:改配置前先-t检查,reload后用ps aux | grep nginx确认进程状态,遇到问题别急着kill,先看看日志再说。
行了,命令都在这儿了,拿去用吧。遇到问题,欢迎回来评论区聊聊。

还没有评论,来说两句吧...