从 nginx 位置路径获取值

Hal*_*ohn 5 nginx

我正在将 nginx 设置为 API 路由器。

如何获取“位置”路径的特定部分并将其动态填充到 proxy_pass 中?例如:

location /users/v2/ { proxy_pass http://app.domain.com/api/ {{users}}/v2; }

我需要获取第一个字段中的任何内容,在本例中为“users”,并将其弹出到 proxy_pass 路径中。

Ter*_*nen 8

我发现您的原始问题和您对答案的评论有点矛盾。但是要从评论中回答您的要求,您可以使用这样的location块:

location ~ ^/(users)/v2/(.+)$ {
    proxy_pass http://app.domain.com/api/$1/v2/$2;
}
Run Code Online (Sandbox Code Playgroud)

我假设这些路径在/v2/here之后还包含其他内容。我捕获其他东西$2以在proxy_pass.

如果您只想允许除用户之外的特定字符串,您可以使用|OR 匹配规则:

location ~ ^/(users|admins)/v2/(.+)$
Run Code Online (Sandbox Code Playgroud)

nginx 中正则表达式捕获的通用规则是括号内的任何正则表达式都在变量中捕获。第一个括号内容被捕获到$1等等。

当然,规则也有例外。(?:users)使 nginx 无法捕获该值。(?<variable>users)将值捕获到名为 的变量中$variable