nginx docker 日志打印请求和响应

下载nginx-lua

bash 复制代码
docker pull fabiocicerchia/nginx-lua

编写配置文件

主要是lua代码的编写,用来获取响应体。

nginx

bash 复制代码
user  nginx;
worker_processes  auto;

error_log  /dev/stdout;
#error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    log_format my escape=json ''
'{ "timestamp": "$time_iso8601″, '
'"remote_addr": "$remote_addr",'
'"remote_port":"$remote_port",'
'"costime": "$request_time",'
'"status": "$status",'
'"request_method":"$request_method",'
'"request_uri":"$request_uri",'
'"request_body":$request_body,'
'"response_body":$resp_body,'
'"agent": "$http_user_agent" }'
'';

    #access_log  off;
    access_log  /dev/stdout my;
    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.conf

bash 复制代码
server {
    listen       20000;
    server_name  localhost;

    #记录nginx请求返回值
    lua_need_request_body on;
    set $resp_body "";
    body_filter_by_lua '
    local resp_body = string.sub(ngx.arg[1], 1, 1000)
    ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_body
    if ngx.arg[2] then
    ngx.var.resp_body = ngx.ctx.buffered
    end
    ';

    #access_log  /var/log/nginx/host.access.log  main;

    # 验证lua
    location /hello {
        default_type 'text/plain';
        content_by_lua 'ngx.say("你好, lua")';
    }

    location /20001/ {
        proxy_pass http://192.168.2.5:20001/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
    }

    location /20002/ {
        proxy_pass http://192.168.2.5:20002/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
    }

    location /20003/ {
        proxy_pass http://192.168.2.5:20003/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
    }

    location /20005/ {
        proxy_pass http://192.168.2.5:20005/;
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

运行

bash 复制代码
docker run  --rm  -it  -p 20000:20000 -v /root/app/tmp/nginx.conf:/etc/nginx/nginx.conf -v /root/app/tmp/default.conf:/etc/nginx/conf.d/default.conf  fabiocicerchia/nginx-lua

验证

bash 复制代码
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://localhost:20000/hello
相关推荐
百度一下吧3 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JeJe同学4 小时前
Docker镜像导入、容器启动
linux·运维·docker
元Y亨H8 小时前
基于 Jenkins + Docker 的前端(Vben Admin)CI/CD 踩坑
docker·jenkins
白兰地空瓶9 小时前
项目要上线了,我连夜学完 Docker:从底层原理到容器化部署全记录
docker·全栈
Knight_AL11 小时前
PostgreSQL Docker 数据库备份:pg_dump 与 SQL 格式备份的区别
数据库·docker·postgresql
灯澜忆梦12 小时前
【docker】#1 | Docker 初识
运维·docker·容器
骑着蜗牛撵大象32713 小时前
穿越 Docker 内核迷雾:镜像分层的叠加态与卷挂载的空间穿梭
运维·docker·容器·联合文件系统·卷挂载·镜像分层·存储驱动
goehou13 小时前
AI 应用上线实战:从本地脚本到 Docker 容器化(密钥、健康检查、镜像瘦身)
docker·ai·llm·部署·教程·容器化
吴声子夜歌13 小时前
Docker入门与实战——Docker数据管理
docker·容器
程序员老赵14 小时前
Docker 部署 TeslaMate:轻松搭建特斯拉车辆数据记录平台
docker·容器·开源