Nginx - stream 模块中按时间记录日志 ngx_stream_log_module
https://nginx.org/en/docs/stream/ngx_stream_log_module.html
Nginx从1.9.0版本开始引入了Stream模块,该模块支持TCP/UDP的反向代理功能。Stream模块允许Nginx处理与TCP和UDP协议相关的流量,适用于邮件代理、数据库代理等场景。自1.11.4版本开始,Nginx还增加了对Stream会话日志的支持,提供基本的连接统计信息。
nginx-log-enhancement
。你可以在nginx-log-enhancement的GitHub页面上找到最新的源代码。使用git工具或直接下载zip文件都可以。
如果下载的是zip文件,解压缩至任意目录。
在编译Nginx之前,需要将nginx-log-enhancement模块包含到Nginx的编译选项中。
cd /path/to/nginx/source
./configure --add-module=/path/to/nginx-log-enhancement
执行make和make install命令编译和安装Nginx。
make
sudo make install
在Nginx的配置文件中添加日志格式和日志记录。
http {
log_format enhanced '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$upstream_addr" "$upstream_response_time"';
access_log /var/log/nginx/access.log enhanced;
}
这个例子中,我们使用了增强的log_format格式,并将其用于access_log指令。
完成配置后,重新加载或重启Nginx服务器。
sudo systemctl reload nginx
使用curl或浏览器访问你的网站,然后检查Nginx日志文件(在这个例子中是/var/log/nginx/access.log
),确保已经开始记录增强的日志信息。
通过这些步骤,你可以安装和配置nginx-log-enhancement模块,并增强Nginx的日志记录功能。记得在部署前做好备份,并在测试通过后将配置应用到生产环境中。
日志格式需要在stream标签内配置,与server标签同级
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"';
}
不同端口配置不同日志输出
这段Nginx配置定义了两个服务器块(server blocks),分别监听9100和9200端口。
server {
listen 9100 ssl;
access_log /opt/nginx-1.24.0/logs/tcp-ssl-access.log proxy;
ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;
ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
proxy_ssl_session_reuse on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_pass redis;
}
server {
listen 9200;
access_log /opt/nginx-1.24.0/logs/tcp-access.log proxy; #日志记录
proxy_connect_timeout 60s;
proxy_timeout 60s;
proxy_pass 127.0.0.1:8100;
ssl_verify_client on;
ssl_client_certificate /opt/nginx-1.24.0/conf/cert/ca.crt;
proxy_ssl on;
ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;
ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
}
这两个服务器块配置了Nginx监听不同的端口,并针对不同的需求进行了SSL/TLS配置、日志记录、代理转发等设置。
输出如下
==> logs/tcp-access.log <==
111.201.222.10 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.959 "127.0.0.1:8100" "250" "7490" "0.003"
111.201.222.10 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.695 "127.0.0.1:8100" "824" "7777" "0.001"
111.201.222.10 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:8100" "222" "7478" "0.009"
==> logs/tcp-ssl-access.log <==
127.0.0.1 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.958 "127.0.0.1:6379" "250" "7490" "0.000"
127.0.0.1 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.650 "127.0.0.1:6379" "824" "7777" "0.000"
127.0.0.1 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:6379" "222" "7478" "0.000"