![nginx中如何根据端口进行转发](https://linux22.com/image/730010/nginx%E4%B8%AD%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E7%AB%AF%E5%8F%A3%E8%BF%9B%E8%A1%8C%E8%BD%AC%E5%8F%91.png)
如果我有这样的代理位置:
location /proxy{
proxy_pass http://127.0.0.1:1234;
}
它只会转发到localhost:1234
。现在我想要的是这样的:
/proxy/5544/abcd/1234 -> localhost:5544/abcd/1234 /proxy/5353/xyz/555 -> localhost:5353/xyz/555
如何实现这一点?
更新
所以我想要的是遵循以下格式的动态端口映射:
/proxy/{port}/{path}
以下是更多映射示例:
localhost/proxy/1234/abcd/xyz -> localhost:1234/abcd/xyz
localhost/proxy/9999/1234/5678 -> localhost:9999/1234/5678
localhost/proxy/8080/sub-path/another-path -> localhost:8080/sub-path/another-path
答案1
有了笔迹,就没法测试了。大概思路是这样的。
location ~ /proxy/(\d+)/(.*)$ {
set $flag $1;
set $url $2;
set $default_port 1234;
if ($flag ~ 5544) {
set $default_port 555;
}
rewrite ^.*$ /$url break;
proxy_pass http://127.0.0.1:$default_port;
}
# curl http://127.0.0.1:555
555
# curl http://127.0.0.1:1234
1234
# curl http://127.0.0.1:80/proxy/5353/index.html
1234
# curl http://127.0.0.1:80/proxy/5544/index.html
555