我是Nginx的新手。据我所知,我们可以在nginx.conf中配置proxy_pass url,如:
location /test
{
proxy_pass http://10.10.10.10:10000;
}
但现在,我需要将proxy_pass发送到变量url,我们可以在http请求标头或请求正文中获取此URL(例如)。
我怎么能实现这个?谢谢你的帮助!
编辑1(解释我的问题):
在其标头中有一个名为“redirectUrl”的param发送给Nginx的http请求,我只是希望Nginx修改此http请求标头,然后将此请求发送到redirectUrl。因为redirectUrl是一个变量,所以我猜“proxy_pass $ request”可以实现这个,但我不知道怎么做。谁可以给我一个提示或是否有任何文件?
编辑2:
我试过ngx_lua:
location /apiproxytest {
set_by_lua $redirectURL '
return ngx.req.get_headers()["Host"]
';
header_filter_by_lua '
ngx.header["RedirectURL"] = nil;
ngx.header["Host"] = nil;
';
echo "1:" $redirectURL;
set_by_lua $redirectURL2 '
return ngx.req.get_headers()["Host"]
';
echo "2:" $redirectURL2;
#proxy_pass $redirectURL;
}
我发现echo 1和echo 2是相同的,正如ngx.header.HEADER解释的那样,ngx.header [“Host”] = nil应该在http请求头中删除Host。为什么echo“2:”$ redirectURL2还可以打印Host的值?
答案 0 :(得分:1)
尝试ngx_lua。
从redirectUrl
中的ngx.req.get_headers
获取set_by_lua
,然后设置为$redirectURL
,最后设置为proxy_pass $redirectURL
。
附加编辑2:
为什么echo 1和echo 2是相同的?
这是由Nginx Phases
引起的 set
或set_by_lua
正在rewrite
阶段工作,echo
正在content
阶段工作,header_filter_by_lua
正在output-header-filter
工作阶段(doc),它位于内容之后。
你的配置是这样的:
set_by_lua
- > set_by_lua
- > echo 1
- > echo 2
- > header_filter_by_lua
。