NGINX conf 配置文件中的变量大全 可用变量列表及说明

本文详细解读了PHP环境中处理HTTP请求的关键变量及其作用,并结合相关技术标签,为开发者提供深入理解与实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$args #这个变量等于请求行中的参数。
$content_length #请求头中的Content-length字段。
$content_type #请求头中的Content-Type字段。
$document_root #当前请求在root指令中指定的值。
$host #请求主机头字段,否则为服务器名称。
$http_user_agent #客户端agent信息
$http_cookie #客户端cookie信息
$limit_rate #这个变量可以限制连接速率。
$request_body_file #客户端请求主体信息的临时文件名。
$request_method #客户端请求的动作,通常为GET或POST。
$remote_addr #客户端的IP地址。
$remote_port #客户端的端口。
$remote_user #已经经过Auth Basic Module验证的用户名。
$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
$query_string #与$args相同。
$scheme #HTTP方法(如http,https)。
$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
$server_name #服务器名称。
$server_port #请求到达服务器的端口号。
$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri #不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。

$document_uri #与$uri相同。


转:http://www.lc365.net/blog/b/14455/


<think>嗯,用户想在Nginx的access_log里记录自定义变量。我之前学过一些Nginx配置的知识,得仔细想想怎么实现这个需求。首先,access_log默认记录的字段是固定的,比如时间、请求状态、客户端IP等。用户需要添加自定义的变量进去,这可能需要用到Nginx变量定义和日志模块的设置。 记得Nginx的日志格式是通过log_format指令定义的,里面可以包含预定义变量和自定义变量。所以第一步应该是在http块中定义一个log_format,包含用户需要的自定义变量。比如,假设用户有一个变量$my_custom_var,那么在log_format里加上这个变量就可以了。 不过,自定义变量是怎么生成的呢?用户可能是在某个location里通过set指令或者Lua脚本设置的变量。比如在配置中,用set $define_error_code 9527; 或者在Lua块中ngx.var.define_error_code = 9527。这时候,需要在log_format里引用这个变量名。 然后,在access_log指令中指定使用这个自定义的log_format。例如,access_log logs/access.log my_custom_format;。这样日志就会包含自定义的变量了。 但需要注意变量的作用域。Nginx变量作用域是location级别的,如果在某个location里定义的变量,要在同一个作用域下的access_log中使用。另外,使用Lua模块设置变量的话,需要确保已经安装了ngx_lua模块,并且配置正确。 可能还需要考虑变量是否在日志记录阶段可用。有些变量可能在请求处理的早期阶段就生成了,而有些可能在日志阶段不可用。比如,使用set指令在server或location块中定义的变量应该是可用的,但如果是通过某些模块在更后面的阶段生成的变量,可能无法被日志捕获。 另外,测试配置的时候,记得用nginx -t检查语法,然后reload配置。如果日志里没有出现自定义变量,可能需要检查变量是否正确设置,或者作用域是否正确。还有,自定义变量名是否在log_format中被正确引用,有没有拼写错误。 用户提供的参考配置中有个例子,在http块里定义了log_format main,里面包含$define_error_code变量。然后在server的location里通过Lua设置了这个变量,并在access_log中使用main格式。这说明配置是可行的,只要变量在日志记录的时候已经被赋值。 总结一下步骤:定义log_format包含自定义变量,确保变量在正确的作用域被赋值,然后在access_log中使用该log_format。可能需要用set指令或Lua模块来设置变量,并注意配置的正确性和作用域问题。</think>### 如何在Nginx的access_log中记录自定义变量 #### 1. 定义自定义变量Nginx配置中,可通过以下方式定义变量: - **`set`指令**:在`server`或`location`块中直接定义变量 ```nginx location / { set $my_var "自定义值"; } ``` - **Lua模块**:通过`ngx_lua`模块动态赋值(需安装Lua模块) ```nginx location / { content_by_lua_block { ngx.var.my_var = "Lua动态值" } } ``` #### 2. 配置日志格式 在`http`块中使用`log_format`指令,添加自定义变量占位符: ```nginx http { log_format custom_format '$remote_addr - $my_var [$time_local] "$request"'; } ``` 此处`$my_var`为自定义变量名,需与定义变量时的名称一致[^4]。 #### 3. 应用日志格式 在`server`或`location`块中指定使用自定义日志格式: ```nginx server { access_log /var/log/nginx/custom_access.log custom_format; } ``` #### 4. 完整配置示例 ```nginx http { log_format custom_format '$remote_addr - $my_var [$time_local] "$request"'; server { listen 80; location / { set $my_var "test_value"; access_log logs/custom_access.log custom_format; return 200 "OK"; } } } ``` #### 5. 验证与生效 ```bash nginx -t # 检查语法 nginx -s reload # 重载配置[^3] ``` #### 注意事项 1. 变量作用域需匹配:自定义变量必须在`access_log`指令的同一层级或更高层级定义 2. 动态变量需注意生命周期:通过Lua模块设置的变量需确保在日志记录阶段仍有效 3. 日志文件权限:确保Nginx进程有权限写入目标日志文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值