Skip to content

运行维护与排错

常用命令

bash
nginx -v
nginx -V
nginx -t
nginx -T
nginx -s reload
nginx -s quit
  • -v 查看 Version,-V 同时显示 Build Parameter 和 Module。
  • -t 检查 Syntax 并尝试打开配置引用的文件。
  • -T 在检查时打印全部展开后的配置,注意其中可能包含敏感路径或值。
  • reload Graceful Reload,quit Graceful Shutdown,stop Fast Shutdown。

使用 Systemd 安装时优先通过对应 Unit 管理 Process,但仍应先执行配置检查:

bash
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx
sudo journalctl -u nginx --since "10 minutes ago"

发布配置

  1. 在 Version Control 中 Review 配置。
  2. 在与 Production 相同的 Nginx Version/Module 下执行 nginx -t
  3. Reload 后检查新旧 Worker、Error Log 和关键 Endpoint。
  4. 验证静态文件、API、TLS、Large Request、WebSocket 等关键路径。
  5. 保留可快速恢复的上一版本配置。

500、502、503、504

Status在 Nginx 场景中的常见含义优先检查
500Nginx Internal Error 或 Upstream 返回 500Error Log、Rewrite/Script、Application Log
502无法取得合法 Upstream ResponseConnection Refused、Reset、Protocol 错配、Invalid Header
503Service Temporarily UnavailableLimit、显式返回、Upstream 无可用节点、Application 503
504等待 Upstream 超时Upstream Latency、proxy_read_timeout、Dependency、Queue

Status Code 可能由 Nginx 产生,也可能只是透传 Upstream。结合 $upstream_status$upstream_addr、Access Log 和 Error Log 判断,不能只根据数字认定故障位置。

常见检查

bash
ss -lntp
ps -ef | grep '[n]ginx'
tail -F /var/log/nginx/error.log
curl -v -H 'Host: example.com' http://127.0.0.1/
curl -vk --resolve example.com:443:127.0.0.1 https://example.com/

curl -k 只适合临时隔离 Certificate Verification 问题,不能作为 Production Fix。

Container

Container 中通常让 Nginx 在 Foreground 运行,并把 Access/Error Log 输出到 stdout/stderr 或由镜像提供的 Symlink。配置、证书和静态文件通过只读 Volume 或 Image 注入,避免在运行中的 Container 内手工修改。

bash
docker run --rm -p 8080:80 \
  -v ./nginx.conf:/etc/nginx/nginx.conf:ro \
  nginx:stable

Production 应锁定具体 Image Version 或 Digest,不使用浮动 latest