运行维护与排错
常用命令
bash
nginx -v
nginx -V
nginx -t
nginx -T
nginx -s reload
nginx -s quit-v查看 Version,-V同时显示 Build Parameter 和 Module。-t检查 Syntax 并尝试打开配置引用的文件。-T在检查时打印全部展开后的配置,注意其中可能包含敏感路径或值。reloadGraceful Reload,quitGraceful Shutdown,stopFast Shutdown。
使用 Systemd 安装时优先通过对应 Unit 管理 Process,但仍应先执行配置检查:
bash
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx
sudo journalctl -u nginx --since "10 minutes ago"发布配置
- 在 Version Control 中 Review 配置。
- 在与 Production 相同的 Nginx Version/Module 下执行
nginx -t。 - Reload 后检查新旧 Worker、Error Log 和关键 Endpoint。
- 验证静态文件、API、TLS、Large Request、WebSocket 等关键路径。
- 保留可快速恢复的上一版本配置。
500、502、503、504
| Status | 在 Nginx 场景中的常见含义 | 优先检查 |
|---|---|---|
| 500 | Nginx Internal Error 或 Upstream 返回 500 | Error Log、Rewrite/Script、Application Log |
| 502 | 无法取得合法 Upstream Response | Connection Refused、Reset、Protocol 错配、Invalid Header |
| 503 | Service Temporarily Unavailable | Limit、显式返回、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:stableProduction 应锁定具体 Image Version 或 Digest,不使用浮动 latest。