四层Nginx代理日志配置
NGINX 4层代理(stream模块)的日志配置需要在stream
块中进行设置。以下是详细的配置方法:
基本日志配置
stream {# 定义日志格式log_format proxy '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time "$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';# 设置访问日志access_log /var/log/nginx/stream.log proxy;# 设置错误日志error_log /var/log/nginx/stream_error.log;# 代理配置示例upstream backend {server 192.168.1.10:3306;server 192.168.1.11:3306;}server {listen 3306;proxy_pass backend;proxy_timeout 1s;proxy_responses 1;proxy_bind $remote_addr transparent;}
}
常用日志变量
在stream模块中可以使用的日志变量包括:
$remote_addr
- 客户端IP地址$time_local
- 本地时间$protocol
- 协议类型(TCP/UDP)$status
- 连接状态$bytes_sent
- 发送字节数$bytes_received
- 接收字节数$session_time
- 会话持续时间$upstream_addr
- 上游服务器地址$upstream_bytes_sent
- 向上游发送的字节数$upstream_bytes_received
- 从上游接收的字节数$upstream_connect_time
- 连接上游服务器的时间
高级配置示例
stream {# 详细的日志格式log_format detailed '$remote_addr - [$time_local] $protocol $status ''$bytes_sent $bytes_received $session_time ''upstream: $upstream_addr ''up_sent: $upstream_bytes_sent ''up_received: $upstream_bytes_received ''up_connect_time: $upstream_connect_time';# 不同服务使用不同日志文件map $server_port $log_file {3306 /var/log/nginx/mysql_proxy.log;5432 /var/log/nginx/postgres_proxy.log;6379 /var/log/nginx/redis_proxy.log;default /var/log/nginx/stream_default.log;}# MySQL代理server {listen 3306;proxy_pass mysql_backend;access_log /var/log/nginx/mysql_proxy.log detailed;error_log /var/log/nginx/mysql_error.log;}# Redis代理server {listen 6379;proxy_pass redis_backend;access_log /var/log/nginx/redis_proxy.log detailed;error_log /var/log/nginx/redis_error.log;}
}
注意事项
- stream模块启用:确保NGINX编译时包含了
--with-stream
模块 - 日志目录权限:确保NGINX进程有写入日志目录的权限
- 日志轮转:配置logrotate来管理日志文件大小
- 性能考虑:频繁的日志写入可能影响性能,可以考虑使用
buffer
参数
检查配置
验证配置是否正确:
nginx -t
重新加载配置:
nginx -s reload
这样配置后,NGINX就能记录4层代理的详细访问和错误日志了。