如何追踪AWS Ubuntu服务器上Nginx反向代理的重启与配置重载事件
嗨,我来帮你搞定这个问题!在AWS上的Ubuntu服务器上追踪Nginx反向代理的重启和配置重载事件,其实有两种实用思路:先看看系统已经默认记录的日志,要是满足不了需求,再自己写个小脚本自定义记录。
一、查看系统默认记录的事件
Ubuntu用systemd管理服务,所以Nginx的所有状态变化(包括重启、重载)都会被journald日志系统记录下来,直接用命令就能查:
查看Nginx服务的完整日志,里面包含所有启动、停止、重载的事件:
journalctl -u nginx.service你会看到类似这样的条目:
Started A high performance web server and a reverse proxy server.(启动事件)、Stopped A high performance web server and a reverse proxy server.(停止事件),配置重载的话会出现Reloading A high performance web server and a reverse proxy server.的内容,每条都带时间戳,一目了然。要是想快速筛选出关键事件,用
grep缩小范围就行:journalctl -u nginx.service | grep -E "Started|Stopped|Reloading"这样就能直接定位到所有重启和重载的时间点,不用翻长长的日志。
注意:Nginx自身的访问日志或错误日志一般不会记录这类管理操作事件,主要还是得靠systemd的日志。
二、自定义脚本记录更详细的事件
如果默认日志不够详细(比如你想知道是谁执行的操作、具体用了什么命令),可以自己写个简单的脚本,让系统在执行Nginx操作时自动记录细节:
先创建一个日志记录脚本,比如
/usr/local/bin/log_nginx_changes.sh,内容如下:#!/bin/bash # 定义日志文件路径 LOG_FILE="/var/log/nginx/nginx_admin_actions.log" # 获取操作类型(重启/重载) ACTION="$1" # 生成时间戳 TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") # 获取执行操作的用户 USER=$(whoami) # 写入日志 echo "[$TIMESTAMP] User '$USER' performed Nginx $ACTION" >> $LOG_FILE记得给脚本加执行权限:
chmod +x /usr/local/bin/log_nginx_changes.sh配置命令别名,让用户执行Nginx操作时自动调用脚本:
编辑用户的~/.bashrc文件,添加以下别名:alias nginx-reload='sudo /usr/local/bin/log_nginx_changes.sh "configuration reload" && sudo systemctl reload nginx' alias nginx-restart='sudo /usr/local/bin/log_nginx_changes.sh "full restart" && sudo systemctl restart nginx'保存后执行
source ~/.bashrc让别名生效。之后用户用nginx-reload或nginx-restart命令时,脚本就会把操作时间、执行用户、操作类型记录到/var/log/nginx/nginx_admin_actions.log里。(可选)如果要强制所有用户执行Nginx操作都记录,你可以修改
sudoers配置(用visudo命令编辑更安全),把Nginx的重启/重载命令和脚本绑定,不过上面的别名方法更简单,适合大多数场景。
备注:内容来源于stack exchange,提问作者simboyd

