Nginx-504 Gateway Time-out排查及解决方案

  前段时间碰到了一个调用服务失去响应的问题,服务是采用Java开发,部署在Tomcat上,前端使用Nginx做代理,但是通过Nginx调用服务的时候一直报504 Gateway Time-out错误,跨过Nginx直接调用服务又正常,所有锁定错误和Nginx有关,后经排查发现是Nginx的日志过大,将存储盘空间占满了,导致自身日志不能正常写入。因为Nginx的日志自身没有最大值限制,不会覆盖和拆分。
  为了解决Nginx日志增长占满磁盘的问题,想到了将日志拆分删除,每天0点拆分日志,最多保留7天的日志文件。

  • 新建一个nginx-log-manage.sh,写入如下内容:
# Directory of nginx log files
LOGS_PATH=/usr/local/nginx/logs
DAYS=7
  
# get yesterday date format as yyyy-MM-dd  
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)  
  
# move log files  
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log  
  
# 
kill -USR1 $(cat ${LOGS_PATH}/nginx.pid)

# delete 7 days ago nginx log files
find $LOGS_PATH -mtime +$DAYS -exec rm -rf {} \;

同时增加一个Linux定时任务,注意文件的位置,每天0点执行该批处理文件

echo "0 0 * * * root /usr/local/nginx/sbin/nginx-log-manage.sh" >> /etc/crontab

然后过几天观察,Nginx的日志就按日期拆分了

Nginx log

你可能感兴趣的:(Nginx-504 Gateway Time-out排查及解决方案)