将 nginx $request_uri 映射到端口

将 nginx $request_uri 映射到端口

我想在 nginx $request_uri 和 $port 之间创建一个映射,我有很多位置,每个位置都有自己的端口。例如我有:

location /path1 {
    proxy_pass 127.0.0.1:10000
}

location /path2 {
    proxy_pass 127.0.0.1:10001
}

我要这个:

map $request_uri $port {
  /path1 10000;
  /path2 10001;
}

location $request_uri {
    proxy_pass 127.0.0.1:$port
}

我该如何进行这样的配置?

答案1

我还没有尝试过,但是这种方法应该可行:

http {
    map $reqest_uri $port {
        ~^/path1 10000;
        ~^/path2 10001;
        default 9000;
    }
}

server {
    location / {
        proxy_pass 127.0.0.1:$port;
    }
}

怎么运行的:

location /捕获所有路径的请求(除非有更具体的匹配)。然后 nginx$port通过运行映射来解析变量的值。

在映射中,我们使用正则表达式来匹配 URI 的前缀。否则,该匹配将是精确匹配,这很可能行不通。

相关内容