一 nginx与body体
说明:本文'不具有'生产意义,只是为了'nginx知识'的闭环,可以'跳过'即可 --> "数据脱敏"题外话: 对body的'CURD',nginx和openresty处理方式'不同'强调: 本文是基于'http'演示的,如果是'https'加密我们是'看不到'的
① core模块提供的关于body指令和变量
描述:客户端和nginx涉及的'body参数'1、nginx在'处理'客户端的'请求体' --> '入'方向 --> 客户端'原始未经过加工'处理2、nginx返回给'客户端'的'响应体' --> '出'方向 --> '经过body_filter'之后的
client_body_buffer_size
client_body_in_file_only
client_body_in_single_buffer
client_body_temp_path
client_body_timeout
client_max_body_size
变量: $body_bytes_sent $bytes_sent $request_body $request_body_file1、 跟'body'有关的变量名2、 跟'length'有关的'字节'长度3、log_format '使用'这些变量即可,建议使用'escape=none'观察
nginx499 body_bytes_sent 为0 的情况
若客户端socket提前关闭了nginx日志body_bytes_sent会为0吗?
需求: nginx中想利用'$request_body'获取post请求的'body'参数,并'落'日志注意: location中用到proxy_pass,xxx_pass'指令'时,该变量才'有值',否则该变量值为'空'
② upstream模块提供关于body的变量
③ proxy模块提供关于body的指令和变量
描述:nginx和上游的'body参数'1、nginx在'处理'后端的'响应体' --> '入'方向 --> 后端'原始未经过加工'处理2、nginx作为代理'处理'转发的'响应体'
proxy_pass_request_body
场景1: 第三方'认证鉴权',nginx转发'请求'时,丢弃'客户端的请求体'备注: 请求体一般和'Content-Length'相关,所以需要修改为'0'或'置空'涉指令:proxy_pass_request_body "默认是on" 和 proxy_set_header Content-Length ""
proxy_set_body
proxy_temp_file_write_size
proxy_temp_path
④ 日志查看
说明:body体的'格式'一般与 'Content-Type'息息相关,尤其是'响应体'payload --> '载荷' --> '请求体'补充:nginx暂时'获取'不到后端的响应体,但是'openresty'可以
body丢弃 body接收 body保存 nginx源码分析
Chrome 开发者工具里网络请求参数信息被放到了Payload一栏里
escape=none 保留'原始'格式, 不存在"双引号"的'\x22'和其它'中文'转义
1) 记录的内容太多,多行'分开'写,最后一个2) 除了'最后一行',注意每行'末尾'一个空格,避免"串连"日志可读性太差
对比:同一个请求,nginx如果没有'escape=none'呢?
响应体和'default_type',以及Content-Type响应头有关系遗留:二进制的字节流?遗留:reset_timedout_connection --> '444 报错的相关指令'遗留:'原始'传输、'压缩'传输 遗留: Content-Length 与'实际传输'字节的关系 -->'无限大',一直等待'超时'