nginx 变量
在一个完整的请求过程中,会产生很多数据,nginx将这些数据以变量的形式提供给使用者。
1. 变量简介
- 所有的
nginx变量在nginx配置文件中引用时都必须带上$前缀; - 在
nginx配置文件中,变量只能存放一种类型的值,那就是字符串类型; nginx使用变量来简化配置和提高配置灵活性,所有的变量值都以$变量名的形式引用;
2. 自定义变量
1.声明变量
可以在http、server、location等标签中使用set命令声明变量,语法如下:
set $变量名 变量值
2.变量的可见性
在不同层级标签中,声明变量可见性规则如下:
location标签中声明的变量对这个location块可见server标签中声明的变量对server块以及server块中的所有子块可见http标签中声明的变量对http块以及http块中的所有子块可见
3.内置预定义变量
- 配置文件 test.conf
server {
listen 80;
server_name test;
root /usr/share/nginx/html;
location / {
return 200 "request_uri:$request_uri";
}
}
-
访问地址
http://test/foo?pid=123&sid=abc,由于nginx中有return关键字,因此chrome浏览器会默认为我们下载一个文件。 -
常用的变量及说明:
| 参数名 | 参数值 | 说明 |
|---|---|---|
| request_filename | /usr/share/nginx/html/foo | 磁盘文件系统待访问文件的完整路径 |
| document_root | /usr/share/nginx/html | 由 URI 和 root/alias 规则生成的文件夹路径 |
| fastcgi_script_name | /foo | 当前请求的脚本名称 |
| uri | /foo | 请求的URL,不包含参数 |
| document_uri | /foo | 与$uri相同 |
| request_uri | /foo?pid=123&sid=abc | 请求的URL,包含参数 |
| args | pid=123&sid=abc | 全部参数字符串 |
| arg_参数名 | arg_pid:123 arg_sid:abc | 获取特定参数值 |
| query_string | pid=123&sid=abc | 与 args 相同 |
| is_args | ? | URL 中是否有参数,有的话返回 ? ,否则返回空 |
| request_method | GET | 请求方法 |
| request_time | 0.000 | 处理请求已消耗的时间 |
| request_length | 444 | 全部请求的长度,包含请求行、请求头、请求体 |
| http_user_agent | Mozilla/5.0..... | 用户浏览器 |
| http_referer | 空 | 从哪些链接过来的请求 |
| remote_addr | 客户端IP | 客户端IP |
| remote_port | 客户端端口 | 客户端端口 |
| server_addr | 服务端 IP 地址 | 服务端 IP 地址 |
| server_port | 80 | 服务端端口 |
| server_protocol | HTTP/1.1 | 服务端协议 |
| scheme | http | 协议名, http 或 https |
| http_via | 空 | 每经过一层代理服务器,都会添加相应的信息 |
| http_cookie | 空 | 获取用户 cookie |
| https | 空 | 是否开启了https,是则返回 on ,否则返回空 |
| limit_rate | 空 | 返回响应时的速度上限值 |
| content_length | 空 | 请求头中的Content-length字段 |
| content_type | 空 | 请求头中的Content-Type字段 |
| request_body_file | 空 | 客户端请求主体信息的临时文件名 |
| remote_user | 空 | 已经经过Auth Basic Module验证的用户名 |
| host | test | 请求信息中的 Host ,如果请求中没有 Host 行,则在请求头中找,最后使用 nginx 中设置的 server_name 。 |