代理请求 - 从 URL 获取参数,添加 header 并使用 Nginx 更新请求 URL
Proxy a request - get a parameter from URL, add a header and update request URL using Nginx
我正在寻找一种使用 Nginx 执行以下操作的方法:
- 拦截请求
- 读取 URL,解析它并从中读取一个值。
- 将该值添加为新请求header
- 更新 URL(删除特定值)
- 将请求转发到另一台服务器
例如
Request URL - http://<<nginx>>/test/001.xml/25
Final URL - http://<<server>>/test/001.xml with header (x-replica: 25)
我有一个 nginx 服务器设置,带有实际服务器的上游。我想知道如何设置 Nginx 来实现此目的?
由于数据存在于请求 URI 本身中(由 nginx 中的 $uri
变量提供),您可以使用 nginx lua 模块解析它。 nginx 需要用 lua 编译才能工作,请参阅:openresty's nginx lua module.
从那里您可以使用给定 $uri
的 set_by_lua_block
或 set_by_lua_file
directive 作为参数。
在配置中,这看起来像:
location / {
...
set_by_lua_file $var_to_set /path/to/script.lua $uri;
# $var_to_set would contain the result of the script from this point
proxy_set_header X-Replica $var_to_set;
...
}
在 script.lua
中,我们可以从 ngx.arg
列表中访问 $uri
变量(参见 these docs):
function parse_uri( uri )
parsed_uri = uri
-- Parse logic here
return parsed_uri
end
return parse_uri( ngx.arg[1] )
同样,您可以修改此函数或创建另一个函数以使用更新的 $uri
.
创建一个变量
我正在寻找一种使用 Nginx 执行以下操作的方法:
- 拦截请求
- 读取 URL,解析它并从中读取一个值。
- 将该值添加为新请求header
- 更新 URL(删除特定值)
- 将请求转发到另一台服务器
例如
Request URL - http://<<nginx>>/test/001.xml/25
Final URL - http://<<server>>/test/001.xml with header (x-replica: 25)
我有一个 nginx 服务器设置,带有实际服务器的上游。我想知道如何设置 Nginx 来实现此目的?
由于数据存在于请求 URI 本身中(由 nginx 中的 $uri
变量提供),您可以使用 nginx lua 模块解析它。 nginx 需要用 lua 编译才能工作,请参阅:openresty's nginx lua module.
从那里您可以使用给定 $uri
的 set_by_lua_block
或 set_by_lua_file
directive 作为参数。
在配置中,这看起来像:
location / {
...
set_by_lua_file $var_to_set /path/to/script.lua $uri;
# $var_to_set would contain the result of the script from this point
proxy_set_header X-Replica $var_to_set;
...
}
在 script.lua
中,我们可以从 ngx.arg
列表中访问 $uri
变量(参见 these docs):
function parse_uri( uri )
parsed_uri = uri
-- Parse logic here
return parsed_uri
end
return parse_uri( ngx.arg[1] )
同样,您可以修改此函数或创建另一个函数以使用更新的 $uri
.