Nginx 内置变量在配置文件中非常有用,可以帮助实现复杂的请求处理逻辑。以下是一些常见 Nginx 内置变量的详细解释:
请求相关变量
-
$arg_name:- 描述:获取请求 URL 中的特定查询参数值。
- 示例:对于请求
http://example.com/page?user=123,$arg_user的值为123。
-
$args:- 描述:获取请求 URL 中的查询字符串部分(不包括问号)。
- 示例:对于请求
http://example.com/page?user=123&lang=en,$args的值为user=123&lang=en。
-
$request_uri:- 描述:包含完整的请求 URI,包括参数部分。
- 示例:对于请求
http://example.com/page?user=123,$request_uri的值为/page?user=123。
-
$uri:- 描述:请求的当前 URI,不包括参数部分,可能会在内部重定向中被修改。
- 示例:初始值与
$request_uri相同,但在重写规则中可能被修改。
-
$document_uri:- 描述:与
$uri相同,用于表示请求的当前 URI。
- 描述:与
-
$request_method:- 描述:请求的方法,如
GET、POST、PUT等。
- 描述:请求的方法,如
-
$remote_addr:- 描述:客户端的 IP 地址。
-
$remote_port:- 描述:客户端连接的端口号。
-
$remote_user:- 描述:如果请求通过 HTTP 基本认证成功,表示认证的用户名。
-
$host:- 描述:请求中的
Host头部字段。如果没有该字段,则使用处理请求的服务器名称。
- 描述:请求中的
响应相关变量
-
$status:- 描述:响应的 HTTP 状态码。
-
$sent_http_header_name:- 描述:用于在响应中获取特定的 HTTP 头部。例如,
$sent_http_content_type获取响应的Content-Type头部。
- 描述:用于在响应中获取特定的 HTTP 头部。例如,
服务器相关变量
-
$server_addr:- 描述:服务器的 IP 地址。注意,获取此变量可能会导致一次系统调用,影响性能。
-
$server_port:- 描述:服务器监听的端口号。
-
$server_name:- 描述:处理请求的服务器名称。
-
$hostname:- 描述:服务器的主机名。
连接相关变量
-
$connection:- 描述:连接的唯一编号。
-
$connection_requests:- 描述:当前连接已经处理的请求数量。
其他常用变量
-
$binary_remote_addr:- 描述:客户端 IP 地址的二进制形式。
-
$scheme:- 描述:请求使用的协议(
http或https)。
- 描述:请求使用的协议(
-
$time_local:- 描述:请求处理的本地时间,格式为
day/month/year:hour:minute:second zone。
- 描述:请求处理的本地时间,格式为
-
$http_user_agent:- 描述:客户端的
User-Agent头部字段。
- 描述:客户端的
-
$http_referer:- 描述:客户端的
Referer头部字段。
- 描述:客户端的
使用注意事项
- 性能影响:某些变量(如
$server_addr)可能会触发系统调用,频繁使用可能影响性能。 - 安全性:请求头相关变量(如
$http_前缀变量)可以被客户端伪造,使用时需要谨慎验证。 - 灵活性:这些变量可以在
nginx.conf中用于条件判断、日志格式化、重写规则、反向代理设置等,提供了强大的灵活性。
通过理解和正确使用这些内置变量,可以极大地提高 Nginx 服务器的配置效率和灵活性。