nginx 1.7.0+ 可原生通过 syslog: 协议直连远程服务器发送日志,需关闭本地文件日志、禁用 buffer/flush 参数,并正确配置 server、facility、tag 等参数;推荐生产环境使用 tcp 协议以提升可靠性。

直接在 Nginx 配置中启用 syslog: 协议即可实现日志直连远程服务器,无需额外工具或补丁。核心是用原生支持替代文件写入,同时避免本地 IO 干扰。
确认 Nginx 版本并关闭本地日志
Nginx 1.7.0+ 原生支持 syslog,运行 nginx -v 确认版本。若低于该版本需先升级。
- 注释或删除所有
access_log /var/log/nginx/access.log类配置 - 显式关闭默认日志:如需彻底禁用,可写
access_log off; - 确保
error_log同样不指向本地文件路径(1.11.6+ 才稳定支持 error_log 的 syslog)
配置 syslog 目标地址与参数
在 http 或 server 块中添加以下指令:
access_log syslog:server=192.168.10.50:514,facility=local7,tag=nginx_access,severity=info;error_log syslog:server=192.168.10.50:514,facility=local6,tag=nginx_error,severity=warn;
说明:
-
server支持 IP、域名、端口(UDP 默认 514,TCP 可改用 601) -
facility用于分类,推荐使用local0–local7避免与系统日志冲突 -
tag是日志前缀,接收端靠它识别来源,rsyslog 中会自动加冒号(如nginx_access:) - 不建议混用
buffer=或flush=—— 这些只对文件日志有效,syslog 模式下会被忽略甚至报错
选择传输协议:UDP 还是 TCP?
默认 UDP 轻量但不可靠;生产环境建议用 TCP 提升稳定性:
- UDP 示例:
syslog:server=192.168.10.50:514 - TCP 示例:
syslog:server=tcp://192.168.10.50:601
远端 rsyslog 需同步启用 TCP 监听:
- 加载模块:
$ModLoad imtcp - 启动监听:
$InputTCPServerRun 601
验证配置是否生效
完成配置后执行三步检查:
- 语法检测:
nginx -t,无误后重载:nginx -s reload - 确认远端端口监听:
ss -tuln | grep :514(UDP)或:601(TCP) - 观察 Nginx worker 进程 IO 表现:
top -p $(pgrep nginx),重点关注%wa是否下降











