
[英]Failing to execute nginx proxy_pass directive for a Dancer2 app inside a Docker container
[英]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.