使用proxy_pass转发请求。 如果输入的网址是www.yyy.com/9.157/7.134/live/playlist.m3u8
我想将它代理到10.5.a.b:1935 / live / playlist.m3u8,
其中前两个八位字节(10.5)保持不变,我需要做的就是从url中提取9.157和7.134并将代理传递给10.5.ab:1935或者(如果10.5.9.157:1935将proxy_pass下调到10.5) .7.134:1935)
这是我的nginx配置的外观
location / {
rewrite (\/)(([0-9][0-9][0-9]|[0-9][0-9]|[0-9])\.([0-9][0-9][0-9]|[0-9][0-9]|[0-9]))(\/) http://10.5.$2:1935/live/suhas_712_media_240p/playlist.m3u8 redirect;
}
上面的代码正在运行,但后来我不想重定向,我想做类似下面的事情
proxy_pass 10.5.a.b:1935
如何将提取的值传递给a,b?
谢谢
答案 0 :(得分:0)
这应该有效:
(为了清楚起见,我使用了This)
location ~* "/(?<a>[0-9]{1,3}\.[0-9]{1,3})/(?<b>[0-9]{1,3}\.[0-9]{1,3})/(?<suffix>.+)$" {
set $port 1935;
set $prefix "http://10.5";
set $target_url_a "$prefix.$a:$port/$suffix";
set $target_url_b "$prefix.$b:$port/$suffix";
add_header X-debug-message_a "$target_url_a"; #just testing
add_header X-debug-message_b "$target_url_b"; #just testing
#proxy_pass $target_url_a; #enable this one for real
return 200; #just testing
}
curl -vv regex names
> GET /9.157/7.134/live/playlist.m3u8 HTTP/1.1
...
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
...
< Content-Length: 0
< Connection: keep-alive
< X-debug-message_a: http://10.5.9.157:1935/live/playlist.m3u8
< X-debug-message_b: http://10.5.7.134:1935/live/playlist.m3u8