繁体   English   中英

NGINX - 动态创建的 proxy_pass url

[英]NGINX - dynamically created proxy_pass url

我有 HTTP API,它使用 URL 提供一些历史值,其中包含 UNIX 时间戳作为选择器。 示例: http://apiserver.org/api/1664269800/value

时间戳值必须是10分钟粒度之一,eg: 10:10:00, 10:10:10转换为时间戳

我需要实现“最新”功能,

我有简单的 nginx 配置,想要的功能是对“/proxyredir”的访问将传递给http://apiserver.org/api/1664269800/value/ ,其中时间戳数字是动态计算的。

location /proxyredir/ {
    proxy_pass http://apiserver.org/api/1664269800/value/;
}

我需要一些魔法来动态计算时间戳值,获取实际日期时间,截断到 10 分钟粒度并执行代理传递。

我研究了 nginx perl 模块https://nginx.org/en/docs/http/ngx_http_perl_module.html?_ga=2.25112314.176064600.1664266767-964362但没有成功

请任何想法如何解决这个问题?

使用 nginx perl 模块解决了问题。 诀窍是 set_perl 指令必须在配置顶层“http”中定义,但如果在“location contex”中使用,此变量将在每个请求中重新评估

配置看起来像:

http {
  ...
  perl_set $tstamptrunc '
                sub {
                        my $r = shift;
                        # UNIX TIMESTAMP trucated to 10minutes
                        $epoch_10m_trunc = int(time()/600)*600;
                        return "$epoch_10m_trunc";
                }
        ';


...

  location ~ /api/latest/(.+) {
    resolver 8.8.8.8;
    proxy_pass: https://remote.org/api/$tstamptrunc/$1;
  }
}

如果动态定义了 proxy_pass 定义,则解析器定义是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM