Nginx核心模块内置变量
本文根据Nginx官网整理了Nginx的ngx_http_core_module模块的内置变量,可与Apache做对比参考。随后做了一次测试观察各变量的值,并附上测试结果。
1.变量列表
$arg_name 请求行中参数name的值。
$args 请求行中的所有参数。
$binary_remote_addr 客户端地址的二进制形式。
$body_bytes_sent 发送给客户端的字节数,不包含响应头的内容,与Apache的mod_log_config模块中的%B兼容。
$bytes_sent 发送给客户端的字节数(1.3.8, 1.2.5)。
$connection 连接序列号(1.3.8,1.2.5)(有人说是TCP连接的序列号,但在1.6.2上抓包观察却不是)。
$connection_requests 当前连接的请求数(1.3.8,1.2.5)。
$content_length 请求头中的Content-Length值。
$content_type 请求头中的Content-Type值。
$cookie_name 名为name的cookie值。
$document_root 当前请求的根目录或别名。
$document_uri 同$uri。
$host 按如下顺序取值:请求的主机名,请求头的Host值,匹配的服务器名。
$hostname 服务器主机名。
$http_name 该变量的最后一部分是请求头中的字段名称转换为小写,破折号由下划线替换而来。比如使用$http_content_encoding获取Content-Encoding的值。
$https 如果使用SSL模式连接,则值为on,否则为空字符串。
$is_args 如果请求行中带有参数,则值为?,否则为空字符串。
$limit_rate 设置的响应速度。
$msec 精确到毫秒的当前时间(1.3.9, 1.2.6)。
$nginx_version nginx版本。
$pid 进程PID。
$pipe 如果请求来自管道,则值为p,否则为.。
$proxy_protocol_addr 来自代理协议头的客户端地址,否则为空字符串(1.5.12)。必须先通过在listen指令中设置proxy_protocol参数来启用代理协议。
$proxy_protocol_port 代理服务器端口(1.11.0)。同样需要使用proxy_protocol启用代理。
$query_string 同$args。
$realpath_root 当前请求的根目录或别名的绝对路径,所有符号链接将解析为实际路径。
$remote_addr 客户端地址。
$remote_port 客户端端口。
$remote_user 基本身份认证使用的用户名。
$request 完整的请求行。
$request_body 请求体。当请求体被读取到内存缓冲区时,变量的值在proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass指令处理的位置可用。
$request_body_file 请求体的临时文件的名称。在处理结束时,需要删除该文件。若要始终将请求主体写入文件,需要启用client_body_in_file_only。当在代理请求或对FastCGI / uwsgi / SCGI服务器的请求中传递临时文件的名称时,应分别通过proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off或scgi_pass_request_body off指令禁用传递请求体。
$request_completion 一次请求结束时值为OK,否则为空字符串。
$request_filename 当前请求的文件路径,由根路径或别名和请求URI组成。
$request_id 16个随机字节生成的唯一请求标识符,用十六进制表示(1.11.0)。
$request_length 请求长度(包括请求行,请求头和请求体)(1.3.12,1.2.7)。
$request_method 请求方法,通常是GET或POST。
$request_time 发出请求时的时间戳。官方说是处理请求所花费的时间(1.3.9,1.2.6)。
$request_uri 完整的原始请求URI(包含参数)。
$scheme 请求协议,http或https。
$sent_http_name 显示自定义的响应头字段,变量名称的最后一部分是字段名称转换为小写,短划线由下划线替换。用法与$http_name类似。
$sent_trailer_name 在响应结束时发送的任意字段(1.13.2),变量名称的最后一部分是字段名称转换为小写,破折号由下划线替换。
$server_addr 接受请求的服务器的地址。计算此变量的值通常需要一次系统调用。为避免系统调用,listen指令必须指定地址并使用bind参数。
$server_name 服务器名。
$server_port 服务器端口。
$server_protocol 请求协议,通常是HTTP/1.0、HTTP/1.1或HTTP/2.0。
$status 响应状态(1.3.2,1.2.2)。
$tcpinfo_rtt,$tcpinfo_rttvar,$tcpinfo_snd_cwnd, $tcpinfo_rcv_space 有关客户端TCP连接的信息,在支持TCP_INFO套接字选项的系统上可用。
$time_iso8601 ISO 8601标准格式的本地时间(1.3.12,1.2.7)。
$time_local 通用日志格式的本地时间(1.3.12,1.2.7)。
$uri 当前请求的URI。$uri的值可能在请求处理期间发生变化,例如在进行内部重定向或使用索引文件时。
2.测试
大致过程如下:
准备好nginx和php环境,使用fastcgi_param将nginx变量传递给php,在php中设置好cookie,最后通过前端页面将结果输出。
本次测试将test.com域名与服务器IP绑定,使用Postman发送GET请求,访问地址是http://test.com:89/var.php?name=Tom&age=20,并添加一个Header字段Name:Bob。
测试结果如下:
| Variable | Value |
| $arg_name | Tom |
| $args | name=Tom&age=20 |
| $binary_remote_addr | \xC0\xA8e8 |
| $body_bytes_sent | 0 |
| $bytes_sent | 0 |
| $connection | 527 |
| $connection_requests | 1 |
| $content_length | |
| $content_type | |
| $cookie_name | Tommy |
| $document_root | /var/www |
| $document_uri | /var.php |
| $host | test.com |
| $hostname | debian8 |
| $http_name | Bob |
| $https | |
| $is_args | ? |
| $limit_rate | 0 |
| $msec | 1532076179.430 |
| $nginx_version | 1.6.2 |
| $pid | 32229 |
| $pipe | . |
| $proxy_protocol_addr | |
| $proxy_protocol_port | |
| $query_string | name=Tom&age=20 |
| $realpath_root | /var/www |
| $remote_addr | 192.168.101.56 |
| $remote_port | 11164 |
| $remote_user | |
| $request | GET /var.php?name=Tom&age=20 HTTP/1.1 |
| $request_body | |
| $request_body_file | |
| $request_completion | |
| $request_filename | /var/www/var.php |
| $request_id | |
| $request_length | 281 |
| $request_method | GET |
| $request_time | 1532076179 |
| $request_uri | /var.php?name=Tom&age=20 |
| $scheme | http |
| $sent_http_name | |
| $sent_trailer_name | |
| $server_addr | 192.168.100.64 |
| $server_name | test.com |
| $server_port | 89 |
| $server_protocol | HTTP/1.1 |
| $status | 000 |
| $tcpinfo_rtt | 4000 |
| $tcpinfo_rttvar | 2000 |
| $tcpinfo_snd_cwnd | 10 |
| $tcpinfo_rcv_space | 29200 |
| $time_iso8601 | 2018-07-20T16:42:59+08:00 |
| $time_local | 20/Jul/2018:16:42:59 +0800 |
| $uri | /var.php |
上述测试只是直接访问Web服务器的结果,没有使用代理,nginx也没有做额外的设置,仅供参考。
注:
1. 前端$status的值是000,后端输出的是200;
2. 1.6.2版本中的$proxy_protocol_port、$request_id和$sent_trailer_name三个变量不能使用。
--------------------------------------------------
参考资料:
1. nginx官网;
2. 《nginx内置变量》。
Nginx核心模块内置变量的更多相关文章
- 使用正则表达式来截取nginx中的内置变量
nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是 ...
- Python-组织结构-目录结构、包导入、__init__文件、模块内置变量、* 导入限制
__pycache__ .pyc文件,中间代码,提升python运行效率 目录 分档和归类 Python项目组织结构 包 模块 类 函数.变量 # 层级依次往下都是一对多关系 Python项目目录结构 ...
- nginx应用场景,特性,目录结构,常用模块,内置变量,URL和URI,http状态码,配置文件详解
1.nginx介绍 1丶俄罗斯人开发的,开源www服务软件 2丶软件一共780K 3丶nginx本身是一款静态(html,js,css,jpg等)www软件 4丶静态小文件高并发,同时占用的资源很少, ...
- nginx的那些内置变量
nginx在配置文件nginx.conf中可以使用很多内置变量,配置如下: location /info { add_header 'Content-Type' 'text/html'; echo & ...
- Nginx内置变量及正则语法
对于很多Nginx初学者来说,配置文件是必须要看懂的.但是当公司的Nginx配置文件放在你面前的时候你总会被一些带着"$"符号和一大推看不懂的的正则给正懵逼.没错带着"$ ...
- nginx之echo模块与内置变量
Nginx扩展第三方模块——echo 第三方模块是对nginx的功能扩展,第三方模块需要在编译nginx的时候使用参数--add-module=PATH指定扩展模块的源码包路径给Nginx扩展添加ec ...
- 【nginx】nginx配置文件结构,内置变量及参数调优
Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...
- nginx 内置变量
http://blog.sina.com.cn/s/articlelist_1834459124_1_1.html nginx内置变量杂谈 http://nginx.org/en/docs/http ...
- nginx内置变量 大全
nginx内置变量 内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_u ...
随机推荐
- Django MySQL 数据库连接
Django 1.11 官方文档 常规说明 数据库连接 CONN_MAX_AGE 定义数据库连接时限(ALL) default:0 保存在每个请求结束时关闭数据库连接的历史行为. None:保持长连接 ...
- sublime插件开发: 文件说明
sublime插件开发 文件 .sublime-settings 设置文件 Main.sublime-menu 主菜单按钮配置文件 Side Bar.sublime-menu 侧边栏菜单文件列表,选中 ...
- 【Gamma】 Phylab 展示博客
目录 [Gamma] Phylab 展示博客 发布地址 网站:PhyLab GitHub Release: WhatAHardChoice/Phylab Gamma版本 一.团队简介 二.项目目标 2 ...
- C#】通过遍历IFrame访问页面元素
最近在做一个小项目,期间需要用到C#去操作IE页面中的元素,实现自动填写表单并且提交的功能,想这网上关于这方面的东西肯定很多,于是开始在网上找资料. 在逆心的博客上找到些东西对自己帮助很大,原文链接: ...
- Vue ----------- 了解, 展示json 数据
Vue.js 是一套构建用户界面的渐进式框架. 优点: 与大型框架不同的是采用自底向上的增量开发的设计, 只聚焦于视图层,不仅易于上手,还便于与第三方库或既有项目整合 当与现代化工具链以及各种类库结 ...
- .NET CORE 中的缓存使用
Net Framewoke的缓存 1.1 System.Web.Caching System.Web.Caching应该是我们最熟悉的缓存类库了,做ASP.NET开发时用到缓存基本都是使用的这个缓存组 ...
- 启动Sonar报错,ERROR: [1] bootstrap checks failed [1]: system call filters failed to install
错误提示信息: ERROR: [1] bootstrap checks failed[1]: system call filters failed to install; check the logs ...
- git在使用push指令的时候产生的错误
一.问题我们在使用git指令的时候往往会出现如下错误. $ git push -u origin master To https://github.com/pzq7025/ss-fly.git ! [ ...
- Spring Cloud之Zuul网关路由
前端请求先通过nginx走到zuul网关服务,zuul负责路由转发.请求过滤等网关接入层的功能,默认和ribbon整合实现了负载均衡 比如说你有20个服务,暴露出去,你的调用方,如果要跟20个服务打交 ...
- 如何在ASP.NET Core Web API中使用Mini Profiler
原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...