Nginx高端成长之路微服务架构和实践PHP经验分享

【充电】《Nginx核心知识100讲》HTTP框架提供的请求相关

2019-01-13  本文已影响5人  言十年

极客专栏《Nginx核心知识100讲》73小节,笔记
注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。

73 | HTTP框架提供的请求相关的变量

除了很多http模块会提供变量以外,nginx的http框架也会提供大量有用的变量。框架提供的变量。不需要我们编译引入新的http模块。而且框架提供了变量往往反应了用户发来的请求被nginx处理的每一个流程和很多细节。所以熟悉了解nginx框架提供的每一个变量的用法是非常有必要的。

与用户请求相关的变量

image.png

演示配置文件中,故意加了两个server_name,访问会用localhost,这里加了主域名(var.taohui.tech)。因为有一些变量的值在通过return来返回它的时候呢,这个值可能还没有发生变化,没有达到预期的效果。比如发送了多少字节。这个时候取不到完整的字节数。所以加了一个access_log(vartest.log),写到这个文件中。演示有些变量在不同的阶段中,比如return是在rewrite阶段,在这个阶段,这个变量的值为0,实际写入日志,也就是log阶段中值就发生变化了。

这里还有一些要给大家说的。比如把limit_rate 变量的值修改成10k。在演示显示这个值的时候就能看到它相应的变化。

通过return指令返回把相关的变量以一行的方式显示。

image.png

server_name 返回的是 var.taohui.tech

body_bytes_sent、bytes_sent 为0,因为这个阶段中没有办法计算出变量实际的值。

image.png

log阶段可以看到真正的值。

HTTP框架提供的变量

为了方便记忆分成了两类。

image.png

01 用户发送来的请求相关的变量,这些变量取到的值都是与用户请求有关的。

02 TCP连接相关的。因为http是跑在TCP之上的。

03 比如request_filename

04 向用户发送http响应

05 系统变量不随请求发生变化

HTTP请求相关的变量

image.png image.png image.png

request_body 取包体实际的值,很多时候取不到。什么时候能取到呢?使用反向代理,设定用内存暂存包体,然后从内存中取。

request 变量值,是用户的原始的url请求。可能在浏览器输入的不太相同。

image.png image.png

请求相关的另一个变量可以通过,http_+头部名字,返回一个具体请求的头部值,图中有六类特殊的。nginx会做一些特定的处理,除此以外我们加入的http+头部名字的变量没有匹配上那六类,将原封不动的从用户请求的header取到,填到变量(http+头部名字)值当中。

留言问题

1.HTTP框架 内置变量很实用 之前又一次帮助数据组的同学获取埋点的log 就通过 $args 和 http_头部名字 获取到相应的数据 写入到log中

2.我有一个疑惑的地方,见您经常说http框架和http模块,这个http框架指的是什么,我看源码,是指的 http.c 这个程序吗?http模块我理解就是源码内 ngx_http_xxxx_module 这样的功能模块(根据自己实际情况来决定是否编译进来)。
您说的这个http框架具体指什么呢?是指的http的处理流程还是某个程序模块。
是不是nginx也有stream框架和mail框架。

 作者回复
有个简单的办法:src/http目录下的文件都是框架,而src/http/modules/目录下的都是http模块。

3.nginx 502的异常情况 有哪些

 作者回复
连接上游失败

上一篇下一篇

猜你喜欢

热点阅读