插件窝 干货文章 nginx宕机怎么办

nginx宕机怎么办

Nginx 日志 配置 检查 653    来源:    2025-04-07

当Nginx出现宕机时,可以按照以下步骤进行排查和恢复:


1. 确认宕机状态

# 检查Nginx进程状态
ps aux | grep nginx

# 检查服务状态(系统使用systemd时)
systemctl status nginx

# 检查端口监听(默认80/443)
netstat -tulnp | grep ':80\|:443'
ss -tulnp | grep nginx

2. 查看错误日志

Nginx日志路径通常为: - 错误日志:/var/log/nginx/error.log - 访问日志:/var/log/nginx/access.log

# 实时查看错误日志
tail -f /var/log/nginx/error.log

# 检查系统日志(如Nginx无输出)
journalctl -u nginx --no-pager -n 50

3. 常见原因及解决方案

A. 配置错误

# 测试配置文件语法
nginx -t

# 修复后重载配置(非重启)
nginx -s reload
  • 问题nginx -t 报错(如语法错误、路径错误)。
  • 解决:根据提示修正 /etc/nginx/nginx.conf 或子配置文件(如 sites-enabled/*)。

B. 端口冲突

# 检查端口占用
lsof -i :80
  • 问题:其他服务(如Apache、Apache2)占用了80/443端口。
  • 解决
    1. 停止冲突服务:systemctl stop apache2
    2. 修改Nginx监听端口或冲突服务的端口。

C. 资源耗尽

# 检查系统资源
free -h    # 内存
df -h      # 磁盘
top        # CPU/进程
  • 问题:内存不足、磁盘满、CPU 100%。
  • 解决
    • 清理磁盘空间(如日志轮转 logrotate)。
    • 优化Nginx配置(如调整 worker_processesworker_connections)。
    • 升级服务器配置。

D. 文件权限问题

# 检查Nginx用户权限
ls -la /var/www/html/
ps aux | grep nginx | grep -v grep
  • 问题:Nginx用户(通常为 www-datanginx)无权限访问文件。
  • 解决bash chown -R www-data:www-data /var/www/html/ chmod -R 755 /var/www/html/

E. 依赖缺失

# 检查动态模块或依赖库
ldd $(which nginx)
  • 问题:缺少库文件(如OpenSSL、PCRE)。
  • 解决:重新安装依赖:

    # Ubuntu/Debian
    apt install --reinstall libpcre3 openssl
    
    # CentOS/RHEL
    yum reinstall pcre openssl
    

4. 尝试重启服务

# 强制停止Nginx(如果进程残留)
pkill -9 nginx

# 重新启动
systemctl start nginx   # systemd
service nginx start     # init.d

5. 高级调试

  • 核心转储分析(如果Nginx崩溃): bash gdb /usr/sbin/nginx /path/to/core.dump
  • 启用调试日志nginx # 在nginx.conf中添加 error_log /var/log/nginx/error.log debug;

6. 预防措施

  1. 监控工具:配置Prometheus + Grafana或Zabbix监控Nginx状态。
  2. 高可用:使用Keepalived实现VIP漂移,或部署多节点+负载均衡。
  3. 日志轮转:配置 logrotate 避免日志占满磁盘。
  4. 定期维护:更新Nginx版本,修复已知漏洞。

总结流程图

Nginx宕机 → 检查进程/端口 → 查看日志 → 测试配置 → 排查资源/权限 → 重启服务 → 监控恢复

通过以上步骤,90%的Nginx宕机问题可以快速定位并解决。如问题持续,建议提供错误日志进一步分析。