天天看點

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-504 Gateway Time-out排查及解決方案

Nginx log