当前位置: 代码网 > 移动>阿里 > Nginx的预定义变量方式

Nginx的预定义变量方式

2025年07月03日 阿里 我要评论
变量一览nginx 提供了一系列预定义变量,可以在配置文件中使用。这些变量提供了关于请求、连接、服务器等信息的访问。以下是一些常用的预定义变量:$arg_parameter: get 请求参数中的指定

变量一览

nginx 提供了一系列预定义变量,可以在配置文件中使用。这些变量提供了关于请求、连接、服务器等信息的访问。

以下是一些常用的预定义变量:

$arg_parameter: get 请求参数中的指定参数值。
$args: 请求中的参数字符串。
$binary_remote_addr: 客户端 ip 地址(二进制格式)。
$body_bytes_sent: 发送给客户端的字节数。
$bytes_sent: 发送给客户端的总字节数。
$connection: 连接序列号。
$connection_requests: 已处理的当前连接的请求数量。
$content_length: 请求头中的 content-length 字段。
$content_type: 请求头中的 content-type 字段。
$cookie_cookie: 请求中的指定 cookie 值。
$document_root: 当前请求的根目录。
$document_uri: 请求的 uri(不包含参数)。
$host: 请求中的主机头字段。
$hostname: 请求的主机名。
$is_args: 如果请求参数存在,则为 "?",否则为空字符串。
$limit_rate: 限制客户端请求的速率。
$msec: 当前时间戳(毫秒级)。
$nginx_version: 当前 nginx 版本号。
$pid: 当前 nginx 进程 id。
$query_string: 请求的查询字符串。
$realpath_root: 请求根目录的真实路径。
$remote_addr: 客户端 ip 地址。
$remote_port: 客户端端口号。
$remote_user: http 认证的用户名。
$request: http 请求行(例如:get /index.html http/1.1)。
$request_body: 请求的主体内容。
$request_completion: 请求的完成状态("ok" 或空)。
$request_filename: 当前请求的文件路径。
$request_length: 请求的长度(包括请求行、头部和主体)。
$request_method: 请求的 http 方法(例如:get、post)。
$request_time: 请求处理时间(秒)。
$request_uri: 请求的 uri(包括参数)。
$scheme: 请求的协议(http 或 https)。
$sent_http_header: 发送给客户端的响应头字段值。
$server_addr: 服务器 ip 地址。
$server_name: 服务器名称。
$server_port: 服务器端口号。
$server_protocol: 服务器协议(例如:http/1.1)。
$status: 服务器响应的 http 状态码。
$tcpinfo_rtt: 客户端到服务器的往返时延(rtt)。
$tcpinfo_rttvar: rtt 方差。
$tcpinfo_snd_cwnd: 发送方拥塞窗口大小。
$time_iso8601: 当前时间(iso 8601 格式)。
$time_local: 当前时间(本地时间格式)。
$uri: 请求的 uri(不包含参数)。
$variable: 自定义的变量值。
$http_header: 请求头中的指定字段值。
$http_accept: 客户端发送的 accept 头部。
$http_accept_encoding: 客户端发送的 accept-encoding 头部。
$http_accept_language: 客户端发送的 accept-language 头部。
$http_cache_control: 客户端发送的 cache-control 头部。
$http_connection: 客户端发送的 connection 头部。
$http_cookie: 客户端发送的 cookie 头部。
$http_host: 请求中的主机头字段。
$http_referer: 引导用户代理到当前页面的来源页面。
$http_user_agent: 客户端的用户代理字符串。
$http_upgrade: 客户端发送的 upgrade 头部。
$http_via: 客户端发送的 via 头部。
$http_x_forwarded_for: 客户端请求中包含的 x-forwarded-for 头部信息,表示请求经过的代理服务器 ip 地址。
$http_x_real_ip: 客户端请求中包含的 x-real-ip 头部信息,表示客户端的真实 ip 地址。

这些预定义变量可以在 nginx 的配置文件中使用,用于记录访问日志、设置重定向、控制访问权限等。使用这些变量可以让 nginx 配置更加灵活和强大。

实例

server_name

在nginx中,server_name指令用于指定服务器块(server block)所匹配的主机名(hostname)。

主机名是浏览器在发送http请求时提供的域名。

server_name指令允许你配置nginx服务器以响应特定的域名请求。

当nginx收到一个请求时,它会检查请求的主机名与配置文件中的server_name指令是否匹配,如果匹配,则会选择相应的服务器块来处理请求。

server {
    listen 80;
    server_name example.com;
    # 其他配置...

}

server {
    listen 80;
    server_name www.example.com;
    # 其他配置...

}

例如,如果你有两个域名example.com和www.example.com指向同一个服务器,但你希望为每个域名提供不同的内容或配置,你可以在nginx配置文件中创建两个服务器块,并分别指定它们的server_name为example.com和www.example.com。

示例配置:

在这个配置中,第一个服务器块将响应example.com域名的请求,而第二个服务器块将响应www.example.com域名的请求。

案例:限制域名访问,但是不限制其对应的公网ip访问

  server {

    listen       9266;

    server_name  10.57.112.210;

     # 禁止以 tech.test.xxxxxxx.cn 为前缀的域名访问

    if ($host ~* "^tech\.test\.xxxxxxx\.cn") {

        return 403;

    }

}

传递客户端的请求信息给后端服务器

在server或者location下配置

proxy_set_header     host $hos:$server_port;
proxy_set_header     x-real-ip $remote_addr;
proxy_set_header     x-forwarded-for $proxy_add_x_forwarded_for;

proxy_set_header host $host:$server_port;:

这一行设置了将要发送到后端服务器的请求头中的 host 字段。$host 表示客户端请求中的主机名,$server_port 表示nginx服务器的端口号。这样设置可以确保后端服务器正确识别请求的目标主机和端口。

proxy_set_header x-real-ip $remote_addr;:

这一行设置了将要发送到后端服务器的请求头中的 x-real-ip 字段。$remote_addr 表示客户端的真实ip地址。这样设置有助于后端服务器获取到客户端的真实ip地址,而不是nginx服务器的ip地址。

proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;:

这一行设置了将要发送到后端服务器的请求头中的 x-forwarded-for 字段。$proxy_add_x_forwarded_for 表示nginx在转发请求时会将客户端的原始ip地址添加到已有的 x-forwarded-for 字段中。

这个字段通常用于跟踪请求经过的代理服务器链路,以便后端服务器可以了解到请求的原始来源。

总的来说,这些配置是为了确保nginx作为代理服务器时能正确地传递客户端的请求信息给后端服务器,并且保留了客户端的真实ip地址和请求路径。

将nginx的访问日志记录到指定的文件中

在http,server或location下配置access_log,在配置access_log前先在http下配置log_format,

# 定义自定义的日志格式 
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
# 使用自定义的日志格式记录访问日志 
access_log /usr/local/nginx/logs/access_9266.log main;
  • access_log: 这是nginx配置指令,用于指定访问日志的位置和格式。
  • /usr/local/nginx/logs/access_9266.log: 这是实际的日志文件路径和文件名。nginx 会将访问日志记录到这个文件中。
  • main: 这是日志格式的名称。在nginx的配置文件中,可以定义不同的日志格式,main 是其中一个预定义的日志格式。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com