nginx(七十七)nginx与包体的探究

一  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_file

1、 跟'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 与'实际传输'字节的关系  -->'无限大',一直等待'超时'

猜你喜欢

转载自blog.csdn.net/wzj_110/article/details/130757808