nginx 内置变量详解及隔离进行简单的拦截
什么是 nginx 内置变量
Nginx 内置变量是由 Nginx 定义的一组变量,用于获取与请求相关联的信息。这些变量可以用于配置 Nginx 的行为或传递给后端应用程序作为请求参数。
常见的内置变量
以下是一些常见的 nginx 内置变量:
- $request_method:请求方法(GET、POST等)。
- $scheme:协议类型(HTTP或HTTPS)。
- $http_user_agent:浏览器 user-agent 字符串。
- $remote_addr:客户端 IP 地址。
- $server_name:服务器名称。
如何使用 nginx 内置变量
可以通过在 Nginx 配置文件中使用以下语法来访问 nginx 内置变量:
location / {
add_header X-Request-Id $request_id;
proxy_pass http://backend$request_uri;
}
以上配置中的 $request_id
就是 Nginx 内置变量,用于将此请求的唯一标识符返回给客户端。
如何隔离进行简单的拦截
可以使用 Nginx 内置变量进行基本的隔离和拦截,以确保进入应用程序的请求仅能是来自特定来源的请求。例如,以下是通过 HTTP Referrer 进行隔离的简单示例:
location / {
if ($http_referer !~* "example\.com") {
return 403;
}
proxy_pass http://backend$request_uri;
}
以上示例中,使用 $http_referer
内置变量检查 HTTP 引用器(Referrer)的值是否为 example.com
,如果不是,则返回 403
状态码。
示例说明
下面我们来看两个实际的示例:
- 使用
$query_string
内置变量控制缓存
http {
# 配置缓存忽略 query string 参数
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
listen 80;
server_name example.com;
location / {
# 如果请求中存在 query string 参数,则需要重新访问后台获取数据。
if ($query_string != "") {
return 404;
}
# 设置缓存过期时间
expires 10m;
# 缓存 status 和 http headers
proxy_cache_revalidate on;
proxy_cache_bypass $http_pragma;
proxy_cache_bypass $http_authorization;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_valid 200 10m;
# 转发请求到后端服务器
proxy_pass https://backend-server;
}
}
}
以上示例中,使用 $query_string
内置变量检查 HTTP 请求中是否带有查询参数。如果存在查询参数,则直接返回 404,不使用缓存。如果没有查询参数,则使用 proxy_cache_key
内置变量组成缓存的键,并设置缓存的过期时间和相应的缓存策略,最后将请求转发到后端服务器。
- 使用
$remote_addr
内置变量对 IP 地址进行访问控制
http {
geo $blocked_ip {
default 0;
10.0.0.0/8 1;
172.16.0.0/12 1;
192.168.0.0/16 1;
}
server {
listen 80;
server_name example.com;
location / {
# 如果请求来自被列入黑名单的 IP,则返回 403
if ($blocked_ip) {
return 403;
}
# 转发请求到后端服务器
proxy_pass https://backend-server;
}
}
}
以上示例通过使用 $remote_addr
内置变量,使用 Nginx 的 Geo 模块进行 IP 地址过滤,将特定 IP 地址列入黑名单,并禁止其进行访问。对于禁止访问的 IP 地址,使用 return 403
返回 403 状态码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx 内置变量详解及隔离进行简单的拦截 - Python技术站