nginx动态转发到upstream
背景
最近在使用prometheus做监控,应用程序也集成了prometheus,因此有很多的数据采集是跟随应用程序走的,导致采集的地址有很多,且都是非公开的访问端口,因此prometheus没法直接从应用程序采集数据
目标
解决prometheus从应用程序采集指标问题
方案
内网端口不直接对外暴露,这个是不可以改的,因此只能通过可以暴露的一些端口来做转发
在nginx上这种方式是可以实现的,我们定义了一个转发的路径/dispatch,需要动态转发的都走到这里
然后定义了两个参数up和path:
up表示具体的服务提供方ip+端口
path表示具体的请求path
location /dispatch {
allow 192.168.0.0/16; # 只允许内网访问
deny all;
set_unescape_uri $dispatch_up $arg_up;
set_unescape_uri $dispatch_path $arg_path;
rewrite (.*)$ $dispatch_path break;
proxy_set_header path $dispatch_path;
proxy_set_header upstream $dispatch_up;
proxy_pass http://$dispatch_up;
}
因此如果访问http://mydomain.com/dispatch?path=/test/hello\&up=127.0.0.1:8080