systemctl status nginx 显示 active (running) 仅是初步判断,需结合 pgrep -f "nginx: master process" 验证 master 进程真实存活,并用 ss -tuln | grep ':80\|:443' 确认端口占用,再通过 nginx -t 校验配置、tail -f /var/log/nginx/error.log 实时排查错误。

直接看 Nginx 进程是否在跑、有没有异常,不用重启也不用装新工具,掌握几个命令和关键位置就够了。
确认进程是否真实运行
别只看“服务显示 running”,得验证 master 进程是否真活着:
- systemctl status nginx:看 Active 行是不是 active (running),顺带扫一眼 Recent logs 里有没有 ERROR 或 failed
- pgrep -f "nginx: master process":返回 0 表示 master 正常;只查 worker 可能误判(master 挂了但 worker 残留)
- ss -tuln | grep ':80\|:443':确认端口被 nginx 占用,不是其他程序冒充
检查配置再动手,避免越重启越挂
很多“重启失败”其实源于配置问题,先校验再操作:
- nginx -t:测试语法和路径(比如证书文件是否存在),成功才继续
- nginx -t -c /etc/nginx/nginx.conf:显式指定配置路径,防止多环境混淆
- 如果
nginx -t报错,别急着 restart,先查/var/log/nginx/error.log定位具体哪一行出问题
实时盯住日志,比状态更反映真实服务
systemd 显示 running ≠ 用户能访问。真正要看的是请求是否被处理:
- tail -f /var/log/nginx/access.log:观察新请求进来没,status=502/503 突增就是后端出问题
-
tail -f /var/log/nginx/error.log:重点搜
connect() failed、Permission denied、no live upstreams这类关键词 - 想查历史压缩日志:zcat /var/log/nginx/access.log.1.gz | tail -30
启用 stub_status 查连接与请求统计
这是 Nginx 自带的轻量状态页,不依赖外部工具:
- 先确认模块已编译:nginx -V 2>&1 | grep -o with-http_stub_status_module(有输出说明支持)
- 在 server 块里加一段:
location /status {<br> stub_status on;<br> access_log off;<br> allow 127.0.0.1;<br> deny all;<br>} - 重载配置后访问 http://localhost/status,能看到 Active connections、accepts/handled/requests 三组数字,以及 reading/writing/waiting 的分布











