2-nginx中的变量

240 阅读2分钟

nginx 变量

在一个完整的请求过程中,会产生很多数据,nginx将这些数据以变量的形式提供给使用者。

1. 变量简介
  • 所有的nginx变量在nginx配置文件中引用时都必须带上$前缀;
  • nginx配置文件中,变量只能存放一种类型的值,那就是字符串类型;
  • nginx使用变量来简化配置和提高配置灵活性,所有的变量值都以$变量名的形式引用;
2. 自定义变量

1.声明变量
可以在httpserverlocation等标签中使用set命令声明变量,语法如下:

set $变量名 变量值

2.变量的可见性
在不同层级标签中,声明变量可见性规则如下:

  • location标签中声明的变量对这个location块可见
  • server标签中声明的变量对server块以及server块中的所有子块可见
  • http标签中声明的变量对http块以及http块中的所有子块可见
3.内置预定义变量
  1. 配置文件 test.conf
server {
        listen       80;
        server_name  test;
        root  /usr/share/nginx/html;
        location / {
                return 200 "request_uri:$request_uri";
        }
}
  1. 访问地址 http://test/foo?pid=123&sid=abc ,由于nginx中有return关键字,因此chrome浏览器会默认为我们下载一个文件。

  2. 常用的变量及说明:

参数名参数值说明
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,包含参数
argspid=123&sid=abc全部参数字符串
arg_参数名 arg_pid:123 arg_sid:abc获取特定参数值
query_stringpid=123&sid=abc与 args 相同
is_args ?URL 中是否有参数,有的话返回 ? ,否则返回空
request_methodGET请求方法
request_time 0.000处理请求已消耗的时间
request_length444全部请求的长度,包含请求行、请求头、请求体
http_user_agentMozilla/5.0.....用户浏览器
http_referer从哪些链接过来的请求
remote_addr 客户端IP客户端IP
remote_port客户端端口客户端端口
server_addr服务端 IP 地址服务端 IP 地址
server_port80服务端端口
server_protocol HTTP/1.1服务端协议
schemehttp协议名, 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 。