Nginx proxy_pass到变量url

时间:2015-05-20 09:36:11

标签: nginx

我是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的值?

1 个答案:

答案 0 :(得分:1)

尝试ngx_lua

redirectUrl中的ngx.req.get_headers获取set_by_lua,然后设置为$redirectURL,最后设置为proxy_pass $redirectURL

附加编辑2:

  

为什么echo 1和echo 2是相同的?

这是由Nginx Phases

引起的

setset_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