简介:当nginx所在服务器宕机时,如何快速定位问题、恢复服务并预防未来故障?本文从紧急处理、故障排查、服务恢复、预防措施四个维度提供系统性解决方案,涵盖命令行工具、日志分析、负载均衡、监控告警等关键技术点。
当服务器宕机时,首要任务是避免业务损失扩大。建议按照以下顺序操作:
服务切换
若部署了多节点架构(如主从、集群),立即通过负载均衡器(如HAProxy、Keepalived)将流量切换至备用节点。例如,在Nginx配置中通过upstream模块定义备用服务器:
upstream backend {server 192.168.1.100:80 max_fails=3 fail_timeout=30s;server 192.168.1.101:80 backup; # 备用节点}
通过proxy_next_upstream指令实现故障自动转移:
location / {proxy_pass http://backend;proxy_next_upstream error timeout invalid_header;}
临时降级
若无可用备用节点,可快速修改DNS解析(如将域名指向静态页面服务器)或通过CDN回源配置返回维护页。例如,在Nginx中配置紧急页面:
server {listen 80;server_name example.com;location / {return 503 "Service Unavailable";error_page 503 /maintenance.html;}location = /maintenance.html {root /var/www/html;internal;}}
通知相关方
通过邮件、短信或IM工具通知运维、开发及业务团队,同步故障影响范围和预计恢复时间(ETA)。
恢复服务后,需系统排查宕机根源,避免问题复发。重点关注以下方向:
系统资源耗尽
top、htop或vmstat查看资源占用。若Nginx进程占用过高,可能是并发连接数超限(检查worker_connections参数)或存在慢请求。df -h检查磁盘使用率,若/var/log/nginx/日志目录占满,会导致服务崩溃。建议配置日志轮转(如logrotate):
/var/log/nginx/*.log {dailymissingokrotate 14compressdelaycompressnotifemptycreate 0640 nginx admsharedscriptspostrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript}
网络问题
netstat -tulnp | grep :80检查80端口是否被其他进程占用。iptables -L或firewall-cmd --list-all确认规则是否放行HTTP/HTTPS流量。dig example.com或nslookup example.com验证域名解析是否正常。配置错误
nginx -t检查配置文件语法,常见错误包括重复的server_name、缺失的分号等。openssl x509 -in /path/to/cert.pem -noout -dates)。依赖服务故障
curl -I http://backend-server测试后端API是否响应。proxy_pass指向的数据库或应用服务是否运行。硬件故障
smartctl -a /dev/sda检查磁盘健康状态。dmesg | grep -i memory查看内核日志中的内存错误记录。根据故障类型,选择以下恢复方案:
重启服务
若为临时性故障(如资源瞬时峰值),可通过以下命令重启Nginx:
systemctl restart nginx # Systemd系统service nginx restart # SysVinit系统
重启后检查状态:
systemctl status nginx
回滚配置
若最近修改过配置文件导致宕机,可回滚至上一版本:
cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.confnginx -t && systemctl restart nginx
扩容资源
若因资源不足导致频繁宕机,需升级服务器配置(如增加CPU核心数、内存容量)或优化Nginx参数:
worker_processes auto; # 自动匹配CPU核心数worker_rlimit_nofile 65535; # 增大文件描述符限制events {worker_connections 4096; # 每个工作进程的最大连接数}
为避免未来宕机,建议实施以下措施:
监控告警
自动化运维
灾备设计
压力测试
使用wrk或ab(Apache Benchmark)模拟高并发场景,验证Nginx的稳定性:
wrk -t12 -c400 -d30s http://example.com/
根据测试结果调整worker_connections、keepalive_timeout等参数。
背景:某电商平台在“双11”期间因Nginx宕机导致订单系统瘫痪2小时。
原因:
proxy_timeout和proxy_connect_timeout,导致长连接堆积。 改进措施:
location /api/ {proxy_pass http://backend;proxy_connect_timeout 5s;proxy_read_timeout 30s;proxy_send_timeout 30s;}
active connections和request time指标。 通过以上方法,可显著降低Nginx宕机概率,保障业务连续性。