当前位置: 首页 > news >正文

Nginx 使用 lua-nginx-module 来获取post请求中的request和response信息

如果想要在nginx中打印出 http request 的所有 header,需要在编译nginx时开启
1、安装编译所需的依赖

apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

2、创建下载路径

mkdir -p /opt/download

3、下载所需的文件

# 不要下载官网http://luajit.org/download/的,要去下载openresty的优化版本 后面会说出现的坑
luajit: wget --no-check-certificate https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20210510.tar.gz
lua-nginx-module: wget --no-check-certificate https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.20.tar.gz
lua-resty-core: wget --no-check-certificate https://github.com/openresty/lua-resty-core/archive/refs/tags/v0.1.22.tar.gz
lua-resty-lrucache: wget --no-check-certificate https://github.com/openresty/lua-resty-lrucache/archive/refs/tags/v0.11.tar.gz
tengine-2.3.2(nginx-1.17.3): wget --no-check-certificate http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
ngx_devel_kit-0.3.1: wget --no-check-certificate https://github.com/vision5/ngx_devel_kit/archive/refs/tags/v0.3.1.tar.gz
openssl-1.1.1f: wget --no-check-certificate https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz

解压所有文件

ls *.tar.gz | xargs -n1 tar xzvf

安装并添加luajit环境变量

cd luajit2-2.1-20210510
make install  PREFIX=/usr/local/LuaJIT
# 编辑环境便利文件
vim /etc/profile.d/lua.sh
export LUAJIT_LIB=/usr/local/LuaJIT/lib
export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.1
# 引用环境变量
source /etc/profile.d/lua.sh 

安装lua_core

cd lua-resty-core-0.1.22
make install PREFIX=/usr/local/lua_core
cd ../lua-resty-lrucache-0.11
make install PREFIX=/usr/local/lua_core

编译安装 tengine(nginx)

cd tengine-2.3.2
./configure --prefix=/usr/local/nginx-1.17.3 --with-http_stub_status_module --with-http_gzip_static_module --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-stream --with-openssl=/opt/download/openssl-1.1.1f --add-module=/opt/download/lua-nginx-module-0.10.20 --add-module=/opt/download/ngx_devel_kit-0.3.1 --add-module=modules/ngx_http_upstream_check_module --add-module=modules/ngx_http_reqstat_module --add-module=modules/ngx_http_sysguard_module --add-module=modules/ngx_http_upstream_session_sticky_module --add-module=modules/ngx_http_user_agent_module --add-module=modules/ngx_slab_stat
make
make install

加载lua库,加入到ld.so.conf文件

cat  /etc/ld.so.conf.d/libc.conf
/usr/local/lib
/usr/local/LuaJIT/lib
# 加载
ldconfig

配置并测试lua环境

添加在http模块下
# 指定lua模块路径,多个之间";"分隔,其中";;"表示默认搜索路径,默认到nginx的根目录下找
lua_package_path "/usr/local/Lua_core/lib/lua/?.lua;;";
#指定server配置文件目录
include /usr/local/nginx-1.17.3/conf/conf.d/*.conf;
#自定义日志格式
log_format test escape=json '{''"time": "$time_iso8601", ''"server_name": "$host", ''"port": "$server_port", ''"method": "$request_method", ''"args": "$args", ''"uri": "$uri", ''"server_protocol": "$server_protocol", ''"status": "$status", ''"body_bytes_sent": "$body_bytes_sent", ''"upstream_addr": "$upstream_addr", ''"upstream_status": "$upstream_status", ''"upstream_response_time": "$upstream_response_time", ''"req_header": "$req_header"''}';

测试域名配置文件

server {listen 80;server_name www.test.com;access_log /var/log/nginx/www.test.com.access.log test;set $req_header "";header_filter_by_lua 'local h = ngx.req.get_headers()for k, v in pairs(h) dongx.var.req_header = ngx.var.req_header .. k.."="..v.." "end';location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;# requset by yanshulproxy_intercept_errors on;error_page 301 = @success;proxy_pass http://172.17.64.32:31593;}location /lua {set $test "hello,world";content_by_lua 'ngx.header.content_type="text/plain"ngx.say(ngx.var.test)';}
}

启动nginx

/usr/local/nginx-1.17.3/sbin/nginx

curl 测试请求

curl 127.0.0.1/lua -H 'host: www.test.com' -H 'test: hjy'

日志

{"time": "2023-08-24T08:03:53+00:00", "server_name": "www.test.com", "port": "80", "method": "GET", "args": "", "uri": "/lua", "server_protocol": "HTTP/1.1", "status": "200", "body_bytes_sent": "22", "upstream_addr": "", "upstream_status": "", "upstream_response_time": "", "req_header": "test=hjy user-agent=curl/7.58.0 accept=*/* host=www.test.com "}

看到日志中 req_header 字段输出所有request header

http://www.lryc.cn/news/138317.html

相关文章:

  • 【Opencv】三维重建之cv::recoverPose()函数(1)
  • Perl兼容正则表达式函数-PHP8知识详解
  • Python处理空值NaN
  • 软件机器人助力交通运输局数据录入,实现高效管理
  • 时序分解 | MATLAB实现基于SGMD辛几何模态分解的信号分解分量可视化
  • FinalShell报错:Swap file “.docker-compose.yml.swp“ already exists
  • 卷积过程详细讲解
  • 代码随想录第五十六天
  • .NET 最便捷的Log4Net日志记录器
  • 深入探讨软件逆向工程:解密黑盒的奥秘
  • 利用tidevice+mysql+grafana实现ios性能测试
  • 内网安全:WMI协议与SMB协议横向移动
  • 05-Numpy基础-用于数组的文件输入输出
  • Docker微服务实战
  • NLNet论文总结和代码实现
  • 数字 IC 设计职位经典笔/面试题(三)
  • Matlab分割彩色图像
  • [数据集][目标检测]垃圾目标检测数据集VOC格式14963张44类别
  • MATLAB算法实战应用案例精讲-【深度学习】推荐系统模型DSSMDeepFM
  • 基于springboot的社区生活缴费系统/基于javaweb的水电缴费系统
  • Linux —— keepalived
  • ubuntu安装pyenv
  • 【Kubernetes】对外服务之 Ingress
  • 大数据项目实战(安装准备)
  • SAP ABAP基础语法-内表篇(二)
  • 读SQL学习指南(第3版)笔记05_过滤
  • 防火墙组建双击热备后老是主备自动切换怎么处理?
  • SQL地址门牌排序,字典序转为数字序
  • DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)
  • HTML番外篇(五)-移动端适配